zoukankan      html  css  js  c++  java
  • url用法

    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里提取参数的次序对视图没有影响。

     

     

  • 相关阅读:
    三步搭建精准召回体系,挽回流失用户
    HMS Core Insights第二期直播预告——华为定位技术让你重拾方向感
    如何区分router.push跳转快应用的来源渠道
    华为预测服务的构建原理是什么?该如何训练模型?
    HarmonyOS开发者日干货资料,奉上!
    技术硬核、体验新颖……HarmonyOS开发者日最值得关注的点都在这里
    Js中Proxy对象
    迭代器模式
    ed命令
    百度实习生前端面试面经
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/5416675.html
Copyright © 2011-2022 走看看