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를 그리고 아무것도 변경되지 : 나는 단지 떠날 수있는 모든 댓글을 달았습니다. 항상 같은 오류가 발생합니다. 이제는이 간단한 코드에서 모든 것이 잘 보였으므로 훨씬 더 혼란 스럽습니다. 이게 서버 나 스턴과 같은 외부 물건의 문제라고 생각하세요? 나는 전혀 모른다 ...
하지 entry''과 함께'add_comment' URL을 것입니다. 'entry.html'을 우리에게 보여주세요? –