Django 템플릿 및 변수 속성
-
09-06-2019 - |
문제
저는 Google App Engine과 Django 템플릿을 사용하고 있습니다.
다음과 같은 개체를 표시하려는 테이블이 있습니다.
Object Result:
Items = [item1,item2]
Users = [{name='username',item1=3,item2=4},..]
Django 템플릿은 다음과 같습니다.
<table>
<tr align="center">
<th>user</th>
{% for item in result.items %}
<th>{{item}}</th>
{% endfor %}
</tr>
{% for user in result.users %}
<tr align="center">
<td>{{user.name}}</td>
{% for item in result.items %}
<td>{{ user.item }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
이제 장고 문서 그것이 볼 때 말한다 . 변수에서
데이터를 얻기 위해 여러 가지 시도를 하는데, 그 중 하나가 바로 제가 원하는 사전 조회인데, 그런 일이 일어나지 않는 것 같습니다...
해결책
변수를 가장 좋은 방법이 아닌 "더 좋은"/"더 나은"솔루션을 찾았지만 작동합니다.
dict의 키를 매개변수로 가져오는 사용자 정의 필터를 django에 설치합니다.
Google 앱 엔진에서 작동하려면 기본 디렉토리에 파일을 추가해야합니다. django_hack.py 여기에는 이 작은 코드 조각이 포함되어 있습니다.
from google.appengine.ext import webapp
register = webapp.template.create_template_register()
def hash(h,key):
if key in h:
return h[key]
else:
return None
register.filter(hash)
이제 이 파일이 있으므로 앱 엔진에 해당 파일을 사용하도록 지시하기만 하면 됩니다.이 작은 줄을 메인 파일에 추가하면 됩니다.
webapp.template.register_template_library('django_hack')
템플릿 보기에서 일반적인 코드 대신 이 템플릿을 추가하세요.
{{ user|hash:item }}
그리고 완벽하게 작동해야 합니다 =)
다른 팁
작동하지 않는 부분은 다음과 같다고 가정합니다. {{ user.item }}
.
Django는 사전 조회를 시도하지만 문자열을 사용합니다. "item"
그리고 그 가치가 아니라 item
루프 변수.Django는 문제가 해결되었을 때 동일한 작업을 수행했습니다. {{ user.name }}
~로 name
의 속성 user
객체라는 변수를 찾는 대신 name
.
내 생각에는 템플릿에서 데이터를 렌더링하기 전에 뷰에서 데이터를 사전 처리해야 할 것 같습니다.
또는 다음과 같이 템플릿의 속성을 확인하는 데 사용되는 기본 django 시스템을 사용할 수 있습니다.
from django.template import Variable, VariableDoesNotExist
@register.filter
def hash(object, attr):
pseudo_context = { 'object' : object }
try:
value = Variable('object.%s' % attr).resolve(pseudo_context)
except VariableDoesNotExist:
value = None
return value
그냥 작동해요
템플릿에서 :
{{ user|hash:item }}
@Dave Webb(아직 댓글을 달 만큼 높은 평가를 받지 못했습니다)
도트 조회는 다음과 같이 요약될 수 있습니다.템플릿 시스템이 변수 이름에서 점을 발견하면 다음 순서로 조회를 시도합니다.
* Dictionary lookup (e.e., foo["bar"])
* Attribute lookup (e.g., foo.bar)
* Method call (e.g., foo.bar())
* List-index lookup (e.g., foo[bar])
시스템은 작동하는 첫 번째 조회 유형을 사용합니다.단락 논리입니다.
user = {'a':1, 'b', 2, 'c', 3}인 django 템플릿을 사용하여 Google App Engine의 user.items에서 k,v를 대체합니다.
{% for pair in user.items %}
{% for keyval in pair %} {{ keyval }}{% endfor %}<br>
{% endfor %}
1
비 2
c 3
각 사전 항목에 대한 pair = (키, 값)입니다.
이러면 안 된다:
{{ user.item }}
이거겠지?
{{ item }}
해당 루프 내의 컨텍스트에 사용자 개체가 없습니다....?