django1.5 사용자 정의 필터 및 레이블

2826 단어
템플릿 라이브러리를 만들려면 다음과 같이 하십시오.
첫째, 템플릿 라이브러리를 어느 Django 응용 프로그램에 두어야 할지 결정합니다.하면, 만약, 만약...py startapp에서 응용 프로그램을 만들었습니다. 응용 프로그램을 거기에 두거나 템플릿 라이브러리에 따로 만들 수 있습니다.우리는 당신의 필터가 훗날 공사에서 유용할 수 있기 때문에 후자를 사용하는 것을 더욱 추천합니다.
둘째, 적당한 Django 패키지에templatetags 디렉터리를 만듭니다.이 디렉터리는 모델스와야 합니다.py 、 views.py 등은 같은 차원에 있다.예를 들면 다음과 같습니다.
books/
    __init__.py
    models.py
    templatetags/
    views.py

templatetags에 파일 2개, 1개 만들기init__.py는 사용자 정의 탭과 필터를 저장하는 다른 파일입니다. 이 파일의 이름은 템플릿에 탭을 불러옵니다. 예를 들어 파일 이름pollextras.py 템플릿에 쓰기
{% load poll_extras %}
from django import template  #     

register = template.Library()  #register       ,template.Library   

@register.filter(name='cut')  #       name:      ,       (eg: cut)
def cut(value, arg):
    return value.replace(arg, '')
@register.tag  #    
def num_plus(parser, token):
	try:
		v1, v2 = token.split_contents()
		sum = int(v1) + int(v2)
	except ValueError:
		msg = 'please enter a number'
		raise template.TemplateSyntaxError(msg)
	return NumPlusNode(sum)

class NumPlusNode(template.Node):
	def __init__(self, sum):
		self.sum = sum
	
	def render(self, context):
		return self.sum

Django가 제공하는 도움말 함수 단순tag.이 함수는django입니다.template.하나의 매개 변수만 있는 함수를 매개 변수로 받아들여render 함수와 그 전제 및 기타 필요한 단위에 포장한 다음 템플릿 시스템을 통해 탭을 등록하는 방법
@register.simple_tag

def current_time(format_string):
    try:
        return datetime.datetime.now().strftime(str(format_string))
    except UnicodeEncodeError:
        return ''

태그 포함
{% books_for_author author %}

결과:
<ul>
    <li>The Cat In The Hat</li>
    <li>Hop On Pop</li>
    <li>Green Eggs And Ham</li>
</ul>

템플릿 세션
def books_for_author(author):
    books = Book.objects.filter(authors__id=author.id)
    return {'books': books}

레이블 출력 렌더링을 위한 템플릿 작성
<ul>
{% for book in books %}
    <li>{{ book.title }}</li>
{% endfor %}
</ul>

하나의 Library
개체 사용 inclusiontag()
이 포함된 탭을 만들고 등록하는 방법입니다.
 if the preceding template is in a file called book_snippet.html, we register the tag like this:
@register.inclusion_tag('book_snippet.html')
def books_for_author(author):
    # ...

템플릿 로더, 즉 TEMPLATELOADERS
의 각 항목은 다음 인터페이스에서 호출될 수 있어야 합니다.
load_template_source(template_name, template_dirs=None)

좋은 웹페이지 즐겨찾기