【发布时间】:2014-08-23 13:02:33
【问题描述】:
我需要你的帮助。我是 django 初学者,我无法使用 django-tables2 中的 linkcolumn。我真的很失望,因为我确信它真的很简单,但直到现在,它还是行不通。我提前感谢你给予我的问题的时间,如果它是愚蠢的,请原谅;-)
总结:
- index.html 返回一个 django-tables2 表,一切正常
- 我想将“名称”列的数据更改为目标为“.../Audit/1/”的超链接(使用链接列),其中 1 来自于被点击的行的 pk
-
发生错误:
NoReverseMatch at /fr/Audit/ Reverse for 'detail' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] Request Method: GET Request URL: http://localhost:8000/fr/Audit/ Django Version: 1.6.5 Exception Type: NoReverseMatch Exception Value: Reverse for 'detail' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] Exception Location: /opt/myenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py in _reverse_with_prefix, line 452 Python Executable: /opt/myenv/bin/python2.7 Python Version: 2.7.6
审计/models.py
# -*- coding: utf-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
from MyParam.models import MyModel, MyMptt
from mptt.models import TreeForeignKey
from organization.models import Org
class Grid(MyMptt):
name = models.CharField(max_length = 45, verbose_name=_(u"grille d'audit"))
parent = TreeForeignKey('self', limit_choices_to={'act': True}, related_name='children', null=True, blank=True, verbose_name=_(u"parent"))
class MPTTMeta:
order_insertion_by = ['name']
class Meta:
verbose_name = _(u"grille d'audit")
verbose_name_plural = _(u"grilles des audits")
def __unicode__(self):
return unicode(self.name)
审计/urls.py
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from Audit import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?P<grid_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<grid_id>\d+)/vote/$', views.vote, name='vote'),
url(r'^(?P<grid_id>\d+)/report/(?P<report_id>\d+)$', views.report, name='report'),
)
审计/tables.py
# -*- coding: utf-8 -*-
import django_tables2 as tables
from django_tables2.utils import A
from Audit.models import Grid
class GridTable(tables.Table):
name = tables.LinkColumn('detail', args=[A('pk')])
class Meta :
model = Grid
# add class="paleblue" to <table> tag
attrs = {"class": "paleblue"}
VISU = ("id", "name", "parent")
sequence = VISU
fields = VISU
审计/views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.core.urlresolvers import reverse
from django_tables2 import RequestConfig
"""
from django.views import generic
"""
from Audit.models import Grid, Item, Assessment, Report, ReportContent
from Audit.tables import GridTable
from organization.models import Org
def index(request):
"""
audit_grid_list = Grid.objects.all().order_by('name')[:5]
context = {'audit_grid_list': audit_grid_list}
return render(request, 'Audit/index.html', context)
"""
table = GridTable(Grid.objects.all())
RequestConfig(request).configure(table)
RequestConfig(request, paginate={"per_page": 25}).configure(table)
return render(request, "Audit/index.html", {"table": table})
def detail(request, grid_id):
org_list = Org.objects.all().order_by('name')[:5]
grid = get_object_or_404(Grid, pk=grid_id)
return render(request, 'Audit/detail.html', {'grid': grid,'org_list': org_list})
审核/模板/index.html
{# Audit/templates/index.html #}
{% load render_table from django_tables2 %}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.css" />
</head>
<body>
{% render_table table %}
</body>
</html>
审核/模板/detail.html
<h1>{{ grid.name }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'Audit:vote' grid.id %}" method="post">
{% csrf_token %}
<!-- test pour choix du service -->
<label for="org">Choix de la cible de l'audit</label>
<select name="org" id="org">
{% for firm in org_list %}
<option value="{{ firm.id }}">{{ firm.name }}</option>
{% endfor %}
</select><br>
{% for item in grid.Item_grid.all %}
<h2>{{ item.name }}</h2>
{% for assess in item.Assessment_item.all %}
<input type="checkbox" name="item{{ forloop.parentloop.counter }}[]" id="item{{ forloop.parentloop.counter }}[]" value="{{ assess.id }}" />
<label for="item{{ forloop.parentloop.counter }}">{{ assess.name }}</label><br />
{% endfor %}
{% endfor %}
<input type="submit" value="Vote" />
</form>
【问题讨论】: