2016-04-06 5 views
1

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, ancak url 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?

+1

Ayrıca 'people' görünümünüzde' url 'olarak adlandırılan bir içerik değişkeni geçiriyor olabilirsiniz. – Selcuk

+0

İ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

cevap

1

Selcuk had the right idea. Jinja şablonları kullanıyordum ve kwargs otomatik olarak ekleniyor. Benim kwargs'mdan biri <url> idi ve jinja ortamına eklediğim url uzantısını fazla sürüyordu. kwarg'u başka bir şeye yeniden adlandırmak sorunu çözdü.