Django,模板中的url标记不起作用:NoReverseMatch

2024-04-27 04:09:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了在django中在模板中生成反向url的问题。我从几个小时前就开始试着解决它,但我不知道可能是什么问题。URL反转在模型和视图中非常有用:

# 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.

我的文件结构如下:

^{pr2}$

我的网址.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'),

然后进入_列表.html公司名称:

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

在视图.py我有:

@with_template
def entry(request, entry_id):
    entry = Entry.objects.get(id=entry_id)
    entry.comments = entry.get_comments()
    return locals()

where with_template是following decorator(但我不认为这是一种情况):

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)

你知道是什么引起了这个问题吗? 非常感谢!在


编辑: 我刚做了个实验。我评论了我能离开的一切: 网址.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"),
)

在视图.py在

# -*- 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})

在入口.html在

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

什么都没变。我总是犯同样的错误。 所以现在我更困惑了,因为在这个简单的代码中,一切看起来都很好。你认为有没有可能是外部的问题,比如服务器或者像这样的smth。。。?我不知道。。。在


Tags: namefrompyimportselfiddefaulturl
1条回答
网友
1楼 · 发布于 2024-04-27 04:09:56

我怀疑您使用的是django1.3,但您没有调用^{}。在

因此,请尝试在URL名称周围不加'

{% url entry 1 %}

相关问题 更多 >