2012-10-19 3 views
2

django의 템플릿에서 역방향 URL을 생성하는 데 문제가 발생했습니다. 나는 몇 시간이 지나서 그것을 풀려고 노력하고 있는데, 나는 그 문제가 무엇인지 알지 못한다. 모델과 뷰에 큰 URL 역전 작품 : 나는 템플릿을 만들려고 할 때Django, 템플릿의 URL 태그가 작동하지 않습니다 : NoReverseMatch

# like this in models.py 
@models.permalink 
    def get_absolute_url(self): 
     return ('entry',(), { 
      'entry_id': self.entry.id, 
     }) 

# or this in views.py 
return HttpResponseRedirect(reverse('entry',args=(entry_id,))) 

는하지만이 같은 오류가 발생합니다 :

:

NoReverseMatch at /entry/1/
Reverse for ''add_comment'' with arguments '(1L,)' and keyword arguments '{}' not found.

내 파일 구조는 다음과 같습니다

project/ 
├── frontend 
│   ├── models.py 
│   ├── urls.py 
│   └── views.py 
├── settings.py 
├── templates 
│   ├── add_comment.html 
│   └── entry.html 
├── utils 
│   └── with_template.py 
└── wsgi.py 

내 urls.py :

from project.frontend.views import * 
from django.conf.urls import patterns, include, url 

urlpatterns = patterns('project.frontend.views', 

    url(r'^entry/(?P<entry_id>\d+)/', 'entry', name="entry"), 
    (r'^entry_list/', 'entry_list'), 

그런 다음 entry_list.html : views.py에서

{% extends "base.html" %} 
{% block content %} 
    {% for entry in entries %} 
      {% url 'entry' entry.id %} 
    {% endfor %} 
{% endblock %} 

내가 가진 :

with_template가 (하지만이 경우라고 생각하지 않습니다) 장식을 따르고
@with_template 
def entry(request, entry_id): 
    entry = Entry.objects.get(id=entry_id) 
    entry.comments = entry.get_comments() 
    return locals() 

:

class TheWrapper(object): 
    def __init__(self, default_template_name): 
     self.default_template_name = default_template_name 

    def __call__(self, func): 
     def decorated_func(request, *args, **kwargs): 
      extra_context = kwargs.pop('extra_context', {}) 
      dictionary = {} 
      ret = func(request, *args, **kwargs) 
      if isinstance(ret, HttpResponse): 
       return ret 
      dictionary.update(ret) 
      dictionary.update(extra_context) 
      return render_to_response(dictionary.get('template_name', 
                self.default_template_name), 
             context_instance=RequestContext(request), 
             dictionary=dictionary) 
     update_wrapper(decorated_func, func) 
     return decorated_func 

if not callable(arg): 
    return TheWrapper(arg) 
else: 
    default_template_name = ''.join([ arg.__name__, '.html']) 
    return TheWrapper(default_template_name)(arg) 

문제의 원인은 무엇입니까? 미리 감사드립니다!


편집 : 난 그냥 실험을했습니다.

{% extends "base.html" %} 
{% block content %} 
{% url 'entry' 1 %} 
{% endblock %} 

entry.html

# -*- coding: UTF-8 -*- 
from justmetyou.frontend.models import * 
from django.shortcuts import render_to_response, get_object_or_404 
def entry(request, entry_id): 
    entry = Entry.objects.get(id=entry_id) 
    return render_to_response('entry.html', {'entry':entry}) 

views.py

# -*- coding: UTF-8 -*- 
from justmetyou.frontend.views import * 
from django.conf.urls import patterns, include, url 
urlpatterns = patterns('justmetyou.frontend.views', 
    url(r'^entry/(?P<entry_id>\d+)/', 'entry', name="entry"), 
) 

urls.py를 그리고 아무것도 변경되지 : 나는 단지 떠날 수있는 모든 댓글을 달았습니다. 항상 같은 오류가 발생합니다. 이제는이 간단한 코드에서 모든 것이 잘 보였으므로 훨씬 더 혼란 스럽습니다. 이게 서버 나 스턴과 같은 외부 물건의 문제라고 생각하세요? 나는 전혀 모른다 ...

+2

하지 entry''과 함께'add_comment' URL을 것입니다. 'entry.html'을 우리에게 보여주세요? –

답변

2

나는 장고 1.3을 사용하고 있고 {% load url from future %}을 호출하지 않았다고 생각한다.

그래서 URL의 이름 주위에 '하지 않고 대신 시도 : 그것은 문제처럼 보인다

{% url entry 1 %} 
+0

장고 1.4.1을 사용하고 있습니다.하지만 맞았습니다. 고마워요! :) 나는이 같은 어리석은 실수가 될 수 있다고 생각하지 않을거야 ... – lukaszzenko

+0

@ ŁukaszJocz 다행 :) –

관련 문제