0

ここに私の urls.py があります

from django.conf.urls import patterns, url, include
from geartables import views
from geartables.views import DataTable


urlpatterns = patterns('',
                       url(r'^$', views.index, name='index'),
                       url(r'^data/$', DataTable.as_view(), name='DataTable'),
                       url(r'^(?P<product_type>[\w\-]+)/$', views.table, name='table'),
)

ユーザーが「localhost/table/」にアクセスすると、テンプレートからページが生成されます。そのテンプレート内には、(JSON データを作成するために) DataTable クラスを呼び出す {% url %} タグがあります。

私の質問は、views.py で DataTable クラスを取得して変数を呼び出すにはどうすればよいですか?

そのようです:

class DataTable(BaseDatatableView):
    model = <product_type>
    ...

編集:

ビュー.py:

...
def table(request, product_type):
    ptype = ProductType.objects.get(url_name=product_type)
    datatable = 'DataTable'
    context = {'mselectmenus': ptype.mselects, 'columns': ptype.columnlist, 'datatable':'DataTable}
    return render(request, 'geartables/dtcode.html', context)

class DataTable(BaseDatatableView):

    p = ProductType.objects.get(name=<product_type>)
    model = p.modelname
    columnlist = p.columnlist  # ex: [["th_pic","Picture"],["brand_name", "Brand"]]
    mselects = p.mselects
    ranges = p.ranges
    max_display_length = 2000

    def __init__(self):
        self.columns = [item[0] for item in self.columnlist]
        self.order_columns = self.columns

    #multiple select filters

    def mselectmenus(p):
        mselectmenu = []
        for item in p.mselects:
            mselectmenu.append(
                [item[1], item[0], p.model.objects.values_list(item[0], flat=True).order_by(item[0]).distinct()])
        return mselectmenu


    #initial render
    def render_column(self, row, column):
        if column == 'th_pic':
            return '<a href=' + row.lg_pic + '><img src=' + row.th_pic + ' /></a>'
        elif column == 'description':
            return ''
        else:
            return super(DataTable, self).render_column(row, column)

    #filtering
    def filter_queryset(self, qs):
        #search bar
        ssearch = self.request.GET.get('sSearch', None)
        if ssearch:
            qs = qs.filter(Q(brand_name__icontains=ssearch) | Q(product_name__icontains=ssearch) | Q(
                rope_type__icontains=ssearch) | Q(length__icontains=ssearch) | Q(diameter__icontains=ssearch) | Q(
                weight__icontains=ssearch) | Q(falls__icontains=ssearch) | Q(color__icontains=ssearch))

        #mselect
        ssearch_1 = self.request.GET.get('sSearch_1', None)
        if ssearch_1:
            qs = qs.filter(Q(brand_name__regex=ssearch_1))

        return qs
...

テンプレートコード:

...
$(document).ready(function() {
    var dtable = $('#{{ ptable }}').dataTable( {
        //"oLanguage": oLanguages,
        "sDom": 'C<"clear">lfrtip',
        "aoColumns": [
            { "bSortable": false, "bSearchable:": false, "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": false,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": true,  "sClass": "center" },
            { "bSortable": true, "bSearchable:": false,  "sClass": "center" },
        ],
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "{% url datatable %}",
    });
...
4

1 に答える 1

1

では、{% url view_name param1 param2 ... %}引数 (param1、param2、...) をビューに渡します。urlview_name は、 fromでビューに定義した名前ですurlpatterns

したがって、次の URL を使用する必要があります。

url(r'^data/<product_type>/$', DataTable.as_view(), name='DataTable'),

次に、これを でキャッチするには、その中にメソッドを実装する必要がありproduct_typeます。DataTabledispatch

def dispatch(self, request, *args, **kwargs):
        self.product_type= kwargs.pop("product_type")
        return super(LanguageMixin, self).dispatch(request, *args, **kwargs)

編集:別の方法は、urlあなたが持っているようにして使用するGET ことです.GETパラメータとして渡したい場合は、それをキャッチするのに最適な場所はget_context_method.

def get_context_data(self, **kwargs):
        expand_text = self.request.GET.get('product_type')

それをGETパラメーターとしてキャッチするには、GET パラメーターを追加して、URL を適切に作成する必要があります。このようなもの:

<a href="{% url view_name %}?product_type={{ some_product_type }}">

{% url view_name %}文字列を構築するだけで、リダイレクトを行わないことに注意してください

于 2014-05-29T17:47:06.703 に答える