django页面参数传递,django向js传参数
有时你会发现你写的视图函数是十分类似的,只有一点点的不同。比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样,因此将部分参数传递到URLconf的视图函数中就可以了。
#urls.py
来自姜戈。糖膏剂网址。默认值导入*
frommysiteimportviews
urlpatterns=模式(,
(r^foo/$,views.foo_view),
(r^bar/$,views.bar_view),
)
#views.py
来自姜戈。快捷方式端口渲染响应
frommysite.modelsimportMyModel
deffoo_view(请求):
m _ list=我的模型。对象。过滤器(is _ new=True)
return render _ to _ response( template 1。html ,{m_list:m_list})
defbar_view(请求):
m _ list=我的模型。对象。过滤器(is _ new=True)
return render _ to _ response( template 2。html ,{m_list:m_list})我们在这代码里面做了重复的工作,不够简练。起初你可能会想,通过对两个统一资源定位器都使用同样的视图,在统一资源定位器中使用括号捕捉请求,然后在视图中检查并决定使用哪个模板来去除代码的冗余,就像这样:
#urls.py
来自姜戈。糖膏剂网址。默认值导入*
frommysiteimportviews
urlpatterns=模式(,
(r^(foo)/$,views.foobar_view),
(r^(bar)/$,views.foobar_view),
)
#views.py
来自姜戈。快捷方式端口渲染响应
frommysite.modelsimportMyModel
deffoobar_view(请求,网址):
m _ list=我的模型。对象。过滤器(is _ new=True)
ifurl==foo:
template_name=template1.html
elifurl==bar:
template_name=template2.html
返回render _ to _ response(template _ name,{m_list:m_list})这种解决方案的问题还是老缺点,就是把你的统一资源定位器耦合进你的代码里面了。如果你打算把/foo/改成/fooey/的话,那么你就得记住要去改变视图里面的代码。
对一个可选统一资源定位器配置参数的优雅解决方法:URLconf里面的每一个模式都可以包含第三个数据:一个关键字参数的字典:
有了这个概念以后,我们就可以把我们现在的例子改写成这样:
#urls.py
来自姜戈。糖膏剂网址。默认值导入*
frommysiteimportviews
urlpatterns=模式(,
(r^foo/$,views.foobar_view,{template_name:template1.html}),
(r^bar/$,views.foobar_view,{template_name:template2.html}),
)
#views.py
来自姜戈。快捷方式端口渲染响应
frommysite.modelsimportMyModel
deffoobar_view(请求,模板名称):
m _ list=我的模型。对象。过滤器(is _ new=True)
返回render _ to _ response(template _ name,{m_list:m_list})如你所见,这个例子中,URLconf指定了模板名称。而视图函数会把它当成另一个参数。
这种使用额外的URLconf参数的技术以最小的代价给你提供了向视图函数传递额外信息的一个好方法。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。