3

私のアプリは多くの列を持つテーブルを表示します。Djangoテーブル2アプリを使用してテーブルをレンダリングします。ユーザーがクリックできるように、1つの列のアイテムをハイパーリンクにしようとしています。URLパターンは単純です:/contact/pk/たとえば、/contact/2/。これは私のモデルにあるものです:

#models.py

class Contact(models.Model):
    name = models.CharField(max_length=200)
    . . .

class ContactTable(tables.Table):

    name = tables.LinkColumn('contact_detail', args=[A('pk')])
    class Meta:
        model = Contact
        attrs = {"class": "paleblue"}

#urls.py

url(r'^contact/(?P<item_id>\d+)/$', 'app.views.contact_view', name='contact_detail'),

ただし、アイテムはハイパーリンクされません。

4

3 に答える 3

12

これはそれを解決しました:

class ContactTable(tables.Table):
    edit_entries = tables.TemplateColumn('<a href="/contact/{{record.id}}">Edit</a>')

    class Meta:
        model = Contact
        attrs = {"class": "paleblue"}
于 2013-02-09T08:59:55.990 に答える
5

nixnotwinのソリューションは、ハードコードされたURLを使用します。逆引き参照URLを使用するには:

class ContactTable(tables.Table):
    edit_entries = tables.TemplateColumn('<a href="{% url \'contact_detail\' record.id %}">Edit</a>')
于 2014-08-09T05:35:08.563 に答える
0

render_tableテンプレートで何を渡しますか?ただの常連QuerySet?私の推測では、ビューでテーブルをインスタンス化して構成するのを忘れていました。ドキュメントで提供されている例は次のとおりです。

# tutorial/views.py
from django.shortcuts import render
from django_tables2   import RequestConfig
from tutorial.models  import Person
from tutorial.tables  import PersonTable

def people(request):
    table = PersonTable(Person.objects.all())
    RequestConfig(request).configure(table)
    return render(request, 'people.html', {'table': table})

このようにすれば、うまくいくはずです。

アップデート:

問題はすでに解決されていることは知っていますがname = tables.LinkColumn('contact_detail', args=[A('pk')])、コード行がContactTableクラスの内部Metaクラス内にあることに気付きました。Meta内部クラスの外にある必要があります。

于 2013-02-09T07:23:52.653 に答える