my_project/jinja2/
içinde bir base.html
sahibiyim ve bir site için <body>
dışındaki her şeyi içerir. Daha sonra base.html
'u bir tane olarak uzatıyoruz. Böyle bir şey kullanarak my_project/people/jinja2/people/people_list.html
bir dosyada app people
den base.html
uzanan am Bu örnekteurl işlevi, Django'daki AttributeError'ı atar
:
:{% extends "base.html" %}
{% block content %}
<!-- Some html -->
{% endblock content %}
Benim base.html
şöyle <head>
blog rss feed bir bağlantı içerir
<link rel="alternate" type="application/atom+xml" title="Blog" href="{{ url('blog:articles_feed') }}" />
Bu, my_project/jinja2/index.html
ve my_project/jinja2/blog_list.html
gibi çoğu yerlerde iyi çalışır, ancak bu 3. uygulamada people
, ben köprüyü alıyorum jinja2 daha iyi hata ayıklama sahip olduğundan
AttributeError: 'str' object has no attribute '__call__'
Ben werkzueg python çalıştırmak ve neler olabileceğini bazı potansiyel ayrıntıları görebilirsiniz:
locals()
verir:
şablon bu kod aynı çizgide hatayı iyice silinir Bu doğru bir varsayım olduğunu, ancakurl
doğru bir fonksiyonu olarak çevreye ekleniyor değildir, ancak bunun yerine bir dize olmadığından emin değilim
{
'_': {...},
'static': < bound method StaticFilesStorage.url of < django.contrib.staticfiles.storage.StaticFilesStorage object at 0x7f423ec3ebe0 >> ,
'joiner': < class 'jinja2.utils.Joiner' > ,
'request': < WSGIRequest: GET '/case-studies/hog?__debugger__=yes&cmd=locals()&frm=139922493301984&s=XfAagGnpxRWFBRRd0Uzk' > ,
'page': None,
'csrf_input': < django.utils.functional.lazy. <locals> .__proxy__ object at 0x7f423e8262e8 > ,
'cycler': < class 'jinja2.utils.Cycler' > ,
'dict': < class 'dict' > ,
'absolute_url': < function absolute_url at 0x7f423ece5b70 > ,
'lipsum': < function generate_lorem_ipsum at 0x7f423ebfc8c8 > ,
'view': < leaf.views.LeafTemplateView object at 0x7f423e820198 > ,
'range': < class 'range' > ,
'ngettext': < function ungettext at 0x7f42450547b8 > ,
'gettext': < function ugettext at 0x7f4245054730 > ,
'absolute_root': < function absolute_root at 0x7f423ece8268 > ,
'datetime': < class 'datetime.datetime' > ,
'csrf_token': < django.utils.functional.lazy. <locals> .__proxy__ object at 0x7f423e826400 > ,
'url': 'people/all'
}
? Benim jinja2.py dosyasında ve jinja2 şablonlarında beklendiği gibi başka bir yerde çalışır. Ne verir?
Ayrıca 'people' görünümünüzde' url 'olarak adlandırılan bir içerik değişkeni geçiriyor olabilirsiniz. – Selcuk
İlginç nokta. Böyle bir şey düşünmemiştim. Bunu, "url (r '^ people-list /', TemplateView.as_view (template_name =" people_list.html ")), gibi bir URL yolu ile" insanlar "uygulamasında yapıyorum. [TemplateView için Django kaynağı] 'ndan (https://github.com/django/django/blob/1.8/django/views/generic/base.py#L152),' url 'ekleme' TemplateView 'göremiyorum bağlam değişkeni. Jinja kullanarak, sadece bu görünüm için beklenmedik bir şekilde bağlam ekleyen herhangi bir şey olurdu (diğer görünümlerde iyi çalışıyor). – Chris