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

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -