Django链接DetailView时出现NoReverseMatch错误

0 投票
2 回答
995 浏览
提问于 2025-04-18 00:00

我在从记者的主视图链接到详细视图时遇到了麻烦。两个网址都没问题。我知道这个问题有很多人讨论过,但网址实在太让人困惑了,我找不到解决办法。
这是我在views.py、table.py(错误出在这一行)和urls.py中的代码。

如果能帮忙,我会非常感激。
链接是/reporters/,应该链接到/reporters/pk/detail。

tables.py 
    import django_tables2 as tables
from django_tables2.utils import A
from models import Reporter

class ReporterTable(tables.Table):
    #my error is on the next time. It works for #list_all but not detail. 
    id = tables.LinkColumn('mysite.apps.reporters.views.detail', args=[A('pk')])
    class Meta:
        model = Reporter
        attrs = {"class": "paleblue"}
        fields = ('id', 'surname', 'othername', 'gender')

class ReporterViewTable(tables.Table):
    class Meta:
        model = Reporter
        attrs = {"class": "paleblue"}

views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from django.views.generic.detail import DetailView
from django_tables2 import RequestConfig
from tables import ReporterTable, ReporterViewTable

from models import Reporter

class ReporterDetailView(DetailView):
    model = Reporter

    def get_context_data(self, **kwargs):
        context = super(ReporterDetailView, self).get_context_data(**kwargs)
        return context

def index(request):
    table = ReporterTable(Reporter.objects.all())
    RequestConfig(request).configure(table)
    return render(request, 'reporters/index.html', {'table':table})

urls.py

from django.conf.urls import patterns, include, url

from django.views.generic import DetailView, ListView
from views import ReporterDetailView

urlpatterns = patterns('mysite.apps.reporters.views',
    url(r'^$', 'index'), 
    url(r'^list_all/$', 'list_all'), 
    url(r'^(?P<pk>\d+)/detail/$', ReporterDetailView.as_view(template_name='reporters/detail.html')),
    url(r'^(?P<reporter_id>\d+)/edit/$', 'edit'),

)

index.html

{% load staticfiles %}
{% load render_table from django_tables2 %}
<link rel="stylesheet" type="text/css" href="{% static 'reporters/style.css' %}" />
{% if table %}
<div>
    {%render_table table %}
</div>
{% else %}
    <p>No Reporters are available.</p>
{% endif %}

非常感谢!

这是完整的异常头信息。

NoReverseMatch at /reporters/
Reverse for 'mysite.apps.reporters.views.detail' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

整个异常信息在这个粘贴链接中可以查看 这里

2 个回答

0

args应该是一个元组,也就是说要用元组来代替列表,像这样:

id = tables.LinkColumn('mysite.apps.reporters.views.detail', args=(A('pk'),))
2

如果你直接导入了一个基于类的视图,你需要给这个视图起个名字,这样你才能在其他地方引用它:

在你的 urls.py 文件中:

urlpatterns = patterns('mysite.apps.reporters.views',
    url(r'^$', 'index'), 
    url(r'^list_all/$', 'list_all'), 
    url(r'^(?P<pk>\d+)/detail/$', ReporterDetailView.as_view(template_name='reporters/detail.html'), name='reporter_detail'),
    url(r'^(?P<reporter_id>\d+)/edit/$', 'edit'),

)

然后在你的 ReporterTable 中:

id = tables.LinkColumn('reporter_detail', args=[A('pk')])

撰写回答