[django] 템플릿에 사용자 정의 표시 내용 (django tag)
다음과 같은 두 개의 테이블을 정의했습니다.
#models.py
class package(models.Model):
packageDetail = models.TextField()
class product(models.Model):
id = models.CharField(max_length=30,primary_key=True)
name = models.CharField(max_length=100)
그 중에서 패키지Detail 필드에 저장된 것은 하나의 제품표의 id로 ['id1','id2'와 같은 구조를 가진다.
views.py 코드는 다음과 같다. 기능은 주로 모든 패키지 내용을 표시하기 위한 것이다.
#views.py
def packagesIndex(request):
packages = package.objects.all()
return render_to_response('tariffManagement/packageIndex.html',locals())
그리고 템플릿 index를 정의했습니다.html
#index.html
<table>
<tr>
<td> </td>
</tr>
{% for package in packages %}
<tr>
<td>
{% load testTag %}
{% getNames package.packageDetail %}
</td>
</tr>
{% endfor %}
</table>
이 템플릿은 패키지 내용을 표시하고 제품 이름입니다.패키지 Detail 필드는 하나의 제품 id를 저장하기 때문에, 대응하는name으로 전환해야 합니다.
{% load testTag%} tag 파일을 로드하는 testTag입니다.py.
{% getNames package.packageDetail%}, getNames는 함수 이름, package.packageDetail은 일반 함수 호출과 유사한 형식으로 변환해야 하는 값입니다.
그런 다음 사용자 정의 tag 를 시작합니다.나는 우선 이 app 아래에서templatetags 폴더를 만들고 이 폴더 아래에 를 만든다init__.py 빈 파일 및 testTag.py 두 파일.testTag.py는 사용자 정의 태그입니다.코드는 다음과 같습니다.
#testTag.py
from django import template
from tables import product
register = template.Library()
@register.tag(name="getNames")
def getNames(parser,token):
try:
packageStr = token.split_contents()
except ValueError:
msg = '%r tag requires a single argument' % token.split_contents()[0]
raise template.TemplateSyntaxError(msg)
return getProductName(packageStr[1])
class getProductName(template.Node):
def __init__(self, packageStr):
self.packageStr= packageStr
def render(self,context):
packageDetail=template.resolve_variable(self.packageStr, context)
productNameList = []
products = product.objects.all()
for productValue in products:
if productValue.id in packageDetail:
productNameList.append(productValue.name)
productNameStr="<br/>".join(productNameList)
return productNameStr
1. def getNames(parser,token):,paser는 템플릿 parser 대상입니다. 저는 사용하지 않았습니다.token은 전송된 값입니다.
2、token.split_contents () 는 빈칸에 따라 전송된 값을 분할하지만 인용부호 안의 값을 구분하지 않습니다.
3. class getProductName (template.Node): 출력 내용을 다시 정의하고render () 를 통해 실행하는 클래스입니다.
4、packageDetail=template.resolve_variable (self.packageStr,context) 은 전송된 값을 가져옵니다
5. 다음 코드는 대응하는name을 찾아내고 문자열로 되돌려주는 것입니다.
기능이 완성되었지만 일부 세부 사항을 이해하지 못했기 때문에 이것은 이후의 코드에서 계속 공부할 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.