url中的name用法:

0.定义主rul.py

urlpatterns = [
url(r'^sinfors/', include('sinfors.urls', namespace="sinfors")),
url(r'^aptest/', include('aptest.urls', namespace="aptest")), #引用app aptest
url(r'^admin/', include(admin.site.urls)),
]

1.定义view.py

# -*- coding: UTF-8 -*-
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from django.core.urlresolvers import reverse
# Create your views here. def add2(request,a,b):
c=int(a)+int(b)
return HttpResponse(str(c)) def add(request):
return render(request,'aptest/test01.html') def testvw(request):
return HttpResponse(u"aa!")

2.定义app(aptest)下的url.py

from django.conf.urls import url
from aptest import views as aptest #aptest是app的名称,主url中已引用该app名称
urlpatterns = [
url(r'^$', aptest.index, name='index'),
url(r'^add2/(\d+)/(\d+)/$', aptest.add2, name='add2'),
url(r'^add/$', aptest.add, name='add'),
url(r'^test011/$', aptest.testvw, name='testname'), #name和url是不同的
]

访问 http://192.168.50.74/aptest/test011/ ,调用aptest的view中的testvw视图

3.在模板中引用该url

<!DOCTYPE html>
<html> <body>
<caption>tt <a class="text-info" href="{% url 'aptest:testname' %}">test01</a></caption> <!-- 通过url中定义的name(testname)进行调用,这样该url可以随意改动(比如test011可以改为其他),模板中的调用却不需要进行任何改动 -->
<caption>add22 <a class="text-info" href="{% url 'aptest:add2' 3 44 %}">add2</a></caption> <!-- 3 44 是add2视图的两个参数 -->
</body>
</html>

在url中提供参数:

url(r'^qlusers/(?P<luser>\w+)/(?P<ldate>\d{8})/$', views.mgmt,{'GET': views.mgmt_get_view,'POST': views.mgmt_post_view},name='luserslog'),

访问该url:http://10.16.2.4/appname/qlusers/zhangsan/20160728

luser参数接收字母格式

ldate参数接收8个数字

如下view中接收到一个dict格式字符串:kwargs为{'luser':'zhangsan','ldate':'20160728'}

view:

def mgmt(request,*args,**kwargs):
mgmt_get_view = kwargs.pop('GET', None) #return None if GET not exists.
mgmt_post_view = kwargs.pop('POST', None)
model = kwargs.pop('model', None)
if request.method == 'GET' and mgmt_get_view is not None:
return mgmt_get_view(request, model,args,kwargs) #将model传递到get view
elif request.method == 'POST' and mgmt_post_view is not None:
return mgmt_post_view(request, model)
#return vmmgmt_post_view(request, *args, **kwargs)
raise Http404 #handle get request.
def mgmt_get_view(request,model,args,kwargs):
if model is not None:
obj_list = model.objects.all() #从url中的 model 参数接收到具体的model类。模板中要使用 obj_list 变量做for循环
counts = model.objects.count()
assert request.method == 'GET'
if kwargs is not None:
if 'luser' in kwargs and 'ldate' in kwargs:

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

from django.conf.urls.defaults import *
from mysite import views urlpatterns = patterns('',
(r'^articles/(\d{4})/$', views.year_archive),
(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
)

下面是相同的 URLconf,使用命名组进行了重写:

from django.conf.urls.defaults import *
from mysite import views urlpatterns = patterns('',
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),
)

这段代码和前面的功能完全一样,只有一个细微的差别: 取的值是以关键字参数的方式而不是以位置参数的方式传递给视图函数的。

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

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

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

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

使用命名组可以让你的URLconfs更加清晰,减少搞混参数次序的潜在BUG,还可以让你在函数定义中对参数重新排序。 接着上面这个例子,如果我们想修改URL把月份放到 年份的 前面 ,而不使用命名组的话,我们就不得不去修改视图 month_archive 的参数次序。 如果我们使用命名组的话,修改URL里提取参数的次序对视图没有影响。

最新文章

  1. Redis 数据库入门指南
  2. MES开发学习一
  3. Android Studio高级配置
  4. linq多表join与group
  5. android studio 的配置
  6. UIWebView与JavaScript(JS) 回调交互 -备
  7. boost进程间通信经常使用开发一篇全(消息队列,共享内存,信号)
  8. 关于 form表单 嵌套问题的解决方案
  9. Angular5 宏观把控
  10. java,maven工程打tar.gz包执行main方法
  11. DGTween 控制物体移动并且播放相应的动画
  12. sv时序组合和时序逻辑
  13. Ubuntu18 的超详细常用软件安装
  14. 行业观察报告:从SAAS困局看行业趋势 ZT
  15. vscode + gradle 创建 java 项目 - java language server无法启动
  16. eureka 服务注册与发现
  17. Docker总结(脑图图片)
  18. WEB入门.七 CSS布局模型
  19. iOS Apple Watch 开发
  20. 基于Github搭建SrpingCloudConfig详解

热门文章

  1. 06-python中的装饰器
  2. NoSQL之Cassandra
  3. Linux的用户(组),权限,文件精妙的三角关系,和强大的帮助系统
  4. java开发一个应用的总结
  5. java.sql.SQLException: Access denied for user &#39;root &#39;@&#39;localhost&#39; (using password: YES) 最蠢
  6. c#基础学习(0629)之导出Excel方法
  7. val();html();.text()区别
  8. WPF进度条
  9. jQuery设置下拉框select 默认选中第一个option
  10. 解决vuejs应用在nginx非根目录下部署时访问404的问题