• 带参数的URLconf


    我们在Django建立helloworld自定义页面创建的页面,只能算是一个静态页,发起一个请求,返回一个固定的值,并不能满足我们动态的需求。今天我们创建一个带参数的URLconf,根据参数展示不同的内容。

    另一个试图函数

    打开views.py,创建一个试图函数

    1 def current_dt(request):
    2     now = datetime.datetime.now()
    3     html = "<html><body>it is now %s.</body></html>" % now
    4     return HttpResponse(html)

    这里我是沿用helloWord那个views.py文件,需要引入datetime模块

    from django.http import HttpResponse
    import datetime

    打开urls.py,配置一个URL

    url(r'^curtime/$',current_dt),

    好了,我们访问一下这个地址吧,效果如下

    每次刷新都会显示当前时间,当然这不是我们的动态效果。

    带参数的视图函数

    在当前时间基础上增加时差的视图。

    我们重复上述动作,新建试图函数(只不过除了request,多一个参数-时差数)

    1 def hours_ahead(request,phours):
    2     try:
    3         phours = int(phours)
    4     except VauleError:
    5         raise Http404()
    6 
    7     dt = datetime.datetime.now() + datetime.timedelta(hours=phours)
    8     html = "<html><body>In %s hour(s),it will be %s.</body></html>" % (phours,dt)
    9     return HttpResponse(html)

    注意:捕获值(传递的参数)永远都是字符串(string)类型,而不会是整数(integer)类型,即使这个字符串全由数字构成(如:“21”)。

    因此这里我们使用int()进行转换

    phours = int(phours)

    配置URLconf

    那么,我们如何设计程序来处理任意数量的时差?

    答案是:使用通配符(wildcard URLpatterns)。一个URL模式就是一个正则表达式,因此,这里可以使用d+来匹配1个以上的数字。

    在这里我们就设置了99个小时的时间段限制。

    现在我们已经设计了一个带通配符的URL,我们需要一个方法把它传递到视图函数里去,这样我们只用一个视图函数就可以处理所有的时间段了。 我们使用圆括号把参数在URL模式里标识出来。在这个例子中,我们想要把这些数字作为参数,用圆括号把 d{1,2} 包围起来

    url(r'^ptime/plus/(d{1,2})/$',hours_ahead),

    另外一个重点,正则表达式字符串的开头字母“r”。 它告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)。 在普通Python字符串中,反斜杠用于特殊字符的转义。比如n转义成一个换行符。 当你用r把它标示为一个原始字符串后,Python不再视其中的反斜杠为转义字符。也就是说,“n”是两个字符串:“”和“n”。由于反斜杠在Python代码和正则表达式中有冲突,因此建议你在Python定义正则表达式时都使用原始字符串。

    好,我们访问一下看看效果吧

    到此为止,我们已经可以传递参数,根据参数来显示内容了。

  • 相关阅读:
    背景图片自适应大小(平铺)
    墨卡托投影示意图
    C# 两个类的实例之间相同属性的值的复制
    C# 并行编程 Task
    C# 并行编程 PLINQ
    C# 并行编程 Parallel
    仰望星空
    Ubuntu的人道精神
    神经网络简介
    并行计算简介
  • 原文地址:https://www.cnblogs.com/cotton/p/3833154.html
Copyright © 2020-2023  润新知