【问题标题】:Linkcolumn does not work django-tables2Linkcolumn 不起作用 django-tables2
【发布时间】:2014-08-23 13:02:33
【问题描述】:

我需要你的帮助。我是 django 初学者,我无法使用 django-tables2 中的 linkcolumn。我真的很失望,因为我确信它真的很简单,但直到现在,它还是行不通。我提前感谢你给予我的问题的时间,如果它是愚蠢的,请原谅;-)

总结:

  1. index.html 返回一个 django-tables2 表,一切正常
  2. 我想将“名称”列的数据更改为目标为“.../Audit/1/”的超链接(使用链接列),其中 1 来自于被点击的行的 pk
  3. 发生错误:

    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>

【问题讨论】:

    标签: python-2.7 django-tables2


    【解决方案1】:

    您的 URL 正则表达式有一个命名组,因此 grid_id 应该是一个关键字参数。使用

    name = tables.LinkColumn('detail', args={'grid_id': A('pk')})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多