首页>>后端>>Python->django如何自动生成url(2023年最新分享)

django如何自动生成url(2023年最新分享)

时间:2023-12-12 本站 点击:0

导读:很多朋友问到关于django如何自动生成url的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

django views和url

提示你在urls.py里面 import views出错

可以看一下本目录有没有__init__.py文件,有的话,换个导入方式,比如import views

其实使用django-admin createapp appname时,自动创建的文件目录中,已经写好了

请教各位高手Django的url配置问题

流线型化(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'),

)

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正则表达式中,命名的正则表达式组的语法是(?pnamepattern),这里name是组的名字,而pattern是匹配的某个模式。

下面是一个使用无名组的URLconf的例子:

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = 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 views

urlpatterns = patterns('',

(r'^arcticles/(?Pyear\d{4})/$', veiws.year_archive),

(r'^arcticles/(?Pyear\d{4})/(?Pmonth\d{2})/$', veiws.month_archive),

)

如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:

month_archive(request, '2006', '03')

而带命名组,同样的请求就是这样的函数调用:

month_archive(request, year='2006', month='03')

从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,

还可以让你的定义中对参数重新排序。

7:视图冗余:

# urls.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^(foo)/$', views.foobar_view),

(r'^(bar)/$', views.foobar_view),

)

# views.py

from django.shortcuts import render_to_response

from mysite.models import MyModel

def 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.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),

(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),

)

# views.py

from django.shortcuts import render_to_response

from mysite.models import MyModel

def 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/(?Pmonth/w{3})/(?Pday/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_view3

urlpatterns = patterns('',

(r'^view1/$', requires_login(my_view1)),

(r'^view2/$', requires_login(my_view2)),

(r'^view3/$', requires_login(my_view3)),

)

Django媒体文件URL的配置

在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:

在文件尾部加入以下目录,用于存放上传的文件

在models中写上image字段其中 %Y 代表年, %m 代表月, blank=True 代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。

image = models.ImageField(upload_to="image/%Y/%m", blank=True)

其中src中的{{ MEDIA_URL }}会在模板中渲染为第一步中的 /media/

如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加 django.template.context_processors.media 。

通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。

第一行为引入静态文件的serve,第二行为导入工程配置文件中的 MEDIA_ROOT

在url中加入:

django怎么发起url请求

开始于setting文件。当你运行python manage.py runserver,脚本将在于manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置时ROOT_URLCONF,它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到

当访问 URL /hello/ 时,Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。 当找到这个匹配 的URLpatterns就调用相关联的view函数,并把HttpRequest 对象作为第一个参数。

正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。 一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的Web Response

总结一下:

进来的请求转入/hello/.

Django通过在setting.py中的ROOT_URLCONF配置来决定根URLconf.

Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

如果找到匹配,将调用相应的视图函数

视图函数返回一个HttpResponse

Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

django如何伪静态,或者是怎么得到网址后缀为“.html”的url

在urls.py文件中

网址匹配中自己添加.html就可以了。这样访问时网页就会有.html

url(r'^product.html', views.product.product, name='product'),

Django 给 css 图片加 url

!DOCTYPE html

html lang="en"

head

meta charset="UTF-8"

title景安/title

/head

body

a href="ssl.zzidc.com"img src="images/a.jpg"/a

/body

/html

在a标签里面嵌套一个img标签即可给图片添加链接

结语:以上就是首席CTO笔记为大家介绍的关于django如何自动生成url的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/28183.html