猿问
下载APP

请问django的templates和url,views之间的关系怎么弄?

django的templates和url,views之间的关系怎么弄


沧海一幻觉
浏览 52回答 4
4回答

暮色呼如

settings:import os.pathTEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),)urls.py:from django.conf.urls.defaults import *from django.views.generic.simple import direct_to_templatefrom cy.views import indexurlpatterns = patterns('',(r'^$',index), (这里地方怎么弄?))views.py:from django.http import Http404,HttpResponsefrom django.template.loader import get_templatefrom django.template import Contextimport datetimedef index(request):now=datetime.datetime.now()return render_to_response('index.html', locals())以下是我的目录结构cy:manage.pycy:__init__.pysettings.pyurls.pyviews.pywsgi.pytemplates:base.htmlindex.htmlabout.htmlcontact.html

慕码人2483693

django2.0 的代码和1。x的代码在这个是完全不一样的。。。。urlpatterns = [path('', views.index, name='index'),path('topics/', views.topics, name='topics'),path('topics/(?P<topic_id>\d+)/', views.topic, name='topic'),]

慕圣8478803

流线型化(streamlinling)函数导入1:直接导入视图函数 from django.conf.urls.defaults import * from mysite.views import hello urlpatterns = patterns('', (r'^hello/$', hello), (r'^time/$', time), )2:导入包函模块名和函数的客串,而不是函数本身 from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^hello/$', 'views.hello'), (r'^time/$', 'views.time'),

烧仙草VB

流线型化(streamlinling)函数导入1:直接导入视图函数from django.conf.urls.defaults import *from mysite.views import hellourlpatterns = patterns('',(r'^hello/$', hello),(r'^time/$', time),)2:导入包函模块名和函数的客串,而不是函数本身from django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^hello/$', 'views.hello'),(r'^time/$', 'views.time'),)3:不用导入任何视图内容,写清楚字符串描述from django.conf.urls.defaults import *urlpatterns = patterns('',(r'^hello/$', 'mysite.views.hello'),(r'^time/$', 'mysite.views.time'),)4:提取一个公共视图前缀from django.conf.urls.defaults import *urlpatterns = patterns('mysite.views',(r'^hello/$', 'hello'),(r'^time/$', 'time'),)5:partterns()返回对对象的相加旧:from django.conf.urls.defaults import *urlpatterns = patterns('mysite.view',(r'^hello/$', 'hello'),(r'^time/$', 'time'),(r'^other/$', 'mysite.others.other'),)新:from django.conf.urls.defaults import *urlpatterns = patterns('mysite.view',(r'^hello/$', 'hello'),(r'^time/$', 'time'),)urlpatterns += patterns('mysite.others',(r'^other/$', 'other'),)6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图。在python正则表达式中,命名的正则表达式组的语法是(?p<name>pattern),这里name是组的名字,而pattern是匹配的某个模式。下面是一个使用无名组的URLconf的例子:from django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^arcticles/(\d{4})/$',views.year_archive),(r'^arcticles/(\d{4})/(\d{2})/$', view.moth_archive),)下面是相同的URLconf,使用命名组进行了重写:from django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^arcticles/(?P<year>\d{4})/$', veiws.year_archive),(r'^arcticles/(?P<year>\d{4})/(?P<month>\d{2})/$', veiws.month_archive),)如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:month_archive(request, '2006', '03')而带命名组,同样的请求就是这样的函数调用:month_archive(request, year='2006', month='03')从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,还可以让你的定义中对参数重新排序。7:视图冗余:# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^(foo)/$', views.foobar_view),(r'^(bar)/$', views.foobar_view),)# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import MyModeldef foobar_view(request, url):m_list = MyModel.objects.filter(is_new=True)if url == 'foo':template_name = 'template1.html'elif url == 'bar':template_name = 'template2.html'return render_to_response(template_name, {'m_list': m_list})利用上面的方法可以减少视图冗余8:为url里传入固定的参数:# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),)# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import MyModeldef foobar_view(request, template_name):m_list = MyModel.objects.filter(is_new=True)return render_to_response(template_name, {'m_list': m_list})一些URL参数详解:/mydata/jan/01//mydata/jan/02//mydata/jan/03/以上为三个url我们可以用不同的方式实现1: (r'^mydata/(/w{3})/(/d/d)', views.mydata) mydata(request, 'jan', '01')2: (r'^mydata/(?P<month>/w{3})/(?P<day>/d/d)', view.mydata) mydata(request, month='jan', day='01')3: (r'^mydata/birthday/$', views.mydata, {month:'jan', day:'01'}) mydata(request, month='jan', day='01')9:include导入:from django.conf.urls.defaults import *urlpatterns = patterns('',(r'^weblog/', include('mysite.blog.urls')),(r'^photos/', include('mysite.photos.urls')),(r'^about/$', 'mysite.views.about'),)10:实例:验证用户是否登录:以下是三个视图def my_view1(request):if not request.user.is_authenticated():return HttpResponseRedirect('/accounts/login/')# ...return render_to_response('template1.html')def my_view2(request):if not request.user.is_authenticated():return HttpResponseRedirect('/accounts/login/')# ...return render_to_response('template2.html')def my_view3(request):if not request.user.is_authenticated():return HttpResponseRedirect('/accounts/login/')# ...return render_to_response('template3.html')以下是对视图进行包装:def requires_login(view):def new_view(request, *args, **kwargs):if not request.user.is_authenticated(): #如果用户没有登录,跳转到登录界面return HttpResponseRedirect('/accounts/login/')return view(request, *args, **kwargs) #否则返回传进来的方法return new_view #返回new_view值:登录视图或者是传进来的视图以下为URL配置:from django.conf.urls.defaults import *from mysite.views import requires_login, my_view1, my_view2, my_view3urlpatterns = patterns('',(r'^view1/$', requires_login(my_view1)),(r'^view2/$', requires_login(my_view2)),(r'^view3/$', requires_login(my_view3)),)
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答