这是我的网址.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/”时,将从模板生成一个页面。在该模板中有一个{%url%}标记,它调用DataTable类(以创建JSON数据)。
我的问题是我怎样才能在课堂上得到数据视图.py调用我的变量?
是这样的:
^{pr2}$编辑:
在视图.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 %}",
});
...
好的,那么使用
{% url view_name param1 param2 ... %}
可以将参数(param1,param2,…)传递给视图。视图名称是您在url
中为视图定义的名称urlpatterns
。在因此,您必须使用以下url:
url(r'^data/<product_type>/$', DataTable.as_view(), name='DataTable'),
然后,要在您的
DataTable
中捕获这个product_type
,您必须在其中实现dispatch
方法:编辑:另一种方法是让
^{pr2}$url
如您所拥有并使用GET
如果要将其作为GET参数传递,则捕捉它的最佳位置是get_context_method
中:为了将其捕获为
GET
参数,必须正确地构造URL,并附加GET参数。像这样:请记住,
{% url view_name %}
只构造字符串,不进行重定向相关问题 更多 >
编程相关推荐