【问题标题】:Django Tables adding a LinkColumn / NoReverseMatch ErrorDjango 表添加 LinkColumn / NoReverseMatch 错误
【发布时间】:2013-12-13 16:05:12
【问题描述】:

我有一个包含一些字段的模型,我想将 LinkColumn 添加到详细信息页面。我有一个工作版本,但我想转移到 django-tables2

问题是链接栏没有显示任何链接,只是一个“-”

模型

class Events(models.Model):
    id = models.IntegerField(primary_key=True)
    date = models.DateField(null=True, blank=True)
    time = models.TimeField(null=True, blank=True)

桌子。在这里我尝试了args=[A('id')]args=[A('pk')]

class EventsTable(tables.Table):

    time = tables.TemplateColumn("{{value|time:'H:i'}}", verbose_name='Time UTC')

    detail_link = tables.LinkColumn('detail', args=[A('id')], verbose_name='Detail')

    class Meta:
        model = Events
        attrs = {"class": "paleblue"}

        fields = ("date", "time", "detail_link")

mi url 模式是

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<event_id>\d+)/$', views.detail, name='detail'),
)

和视图

def index(request):
    table = EventsTable(Events.objects.all(), order_by=('-date', '-time'))
    RequestConfig(request, paginate={"per_page": PAGE_LIMIT}).configure(table)
    return render(request, "db_interface/events.html", {"table": table})

编辑: 将 detail_link 更改为

detail_link = tables.LinkColumn('detail', args=[A('id')], verbose_name='Detail', empty_values=())

现在我遇到了 NoReverseMatch 异常

Reverse for 'detail' with arguments '(5075,)' and keyword arguments '{}' not found

数字 5075 是第一个事件的 id。我不知道是否出于任何原因没有将参数作为 int 传递?

【问题讨论】:

    标签: python django django-tables2


    【解决方案1】:

    试试:

    detail_link = tables.LinkColumn('detail', args=[A('id')], verbose_name='Detail', empty_values=())
    

    根据docsrender 方法仅在确定单元格的值不是空值时才被调用。由于Event 模型没有detail_link 字段,因此没有赋予它任何值。

    【讨论】:

    • 谢谢,我试过了,现在出现错误。 Reverse for 'detail' with arguments '(5075,)' and keyword arguments '{}' not found. 5075 是第一个事件的 id。错误出现在{% for column, cell in row.items %} 我想是网址有问题,但我无法弄清楚
    • 在shell或视图中做reverse("detail", args=[event.id]) 是否有效?
    • 如果我把 url 放在浏览器中它可以正常工作,(127.0.0.1:8000/db_interface/5075,但不是在 shell 中。在使用 django-tables 之前,我使用了模板代码 &lt;a href="{% url 'db_interface:detail' event.id %}"&gt; 可以工作
    • 啊,所以 url 是命名空间的。因此,如果您执行 reverse("db_interface:detail", args=[event.id]),它应该可以工作吗?如果是,请将LinkColumn 中的“detail”替换为“db_interface:detail”
    • 最后我刚刚创建了一个 TemplateColumn 并且它可以工作
    猜你喜欢
    • 2015-10-24
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 2017-07-30
    • 2017-03-14
    相关资源
    最近更新 更多