문제

저는 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 }}

해당 루프 내의 컨텍스트에 사용자 개체가 없습니다....?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top