python - Sharing variables between urlpatterns in Django -
here urls.py
from django.conf.urls import patterns, url, include geartables import views 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'), )
when user goes "localhost/table/", page generated template. within template {% url %} tag calls datatable class (to create json data).
so question how can datatable class in views.py call variable?
like so:
class datatable(basedatatableview): model = <product_type> ...
edit:
views.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] item in self.columnlist] self.order_columns = self.columns #multiple select filters def mselectmenus(p): mselectmenu = [] 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 ...
template code:
... $(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 %}", }); ...
ok, {% url view_name param1 param2 ... %}
passing arguments(param1, param2,...) view. view_name name defined view in url
urlpatterns
.
therefore, have use url:
url(r'^data/<product_type>/$', datatable.as_view(), name='datatable'),
then, catch product_type
in datatable
, have implement dispatch
method inside it:
def dispatch(self, request, *args, **kwargs): self.product_type= kwargs.pop("product_type") return super(languagemixin, self).dispatch(request, *args, **kwargs)
edit: way let url
have , use get
if want pass parameter, best place catch inside get_context_method
:
def get_context_data(self, **kwargs): expand_text = self.request.get.get('product_type')
in order catch get
parameter, have construct url properly, appending parameters. this:
<a href="{% url view_name %}?product_type={{ some_product_type }}">
keep in mind {% url view_name %}
constructs string, not make redirect
Comments
Post a Comment