使用Django,你会用不一样的方法来讲明这两件事 页面的内容是靠view function(视图函数) 来产生,URL定义在 URLconf 中。首先,咱们先写一个Hello World视图函数。html
python3.6 + django 2.2.2python
1. 第一份视图正则表达式
建立views.pydjango
from django.http import HttpResponse def hello(request): return HttpResponse("Hello World")
代码说明:ide
2. 第一个URLconf函数
URLconf 就像是 Django 所支撑网站的目录。 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。网站
from django.conf.urls.defaults import * from spider.views import hello urlpatterns = [ path('admin/', admin.site.urls), path('', views.hello), path('hello/', views.hello), ]
代码说明:url
首先,咱们从模块 (在 Python 的 import 语法中, spider/views.py 转译为 spider.views ) 中引入了 hello视图。 (这假设spider/views.py在你的Python搜索路径上。关于搜索路径的解释,请参照下文。)spa
接下来,咱们为urlpatterns加上一行: path(‘hello/’, views.hello), 这行被称做URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。code
3. 动态内容
让Django视图显示当前日期和时间。
spider/views.py的代码以下:
def current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date': now}) def hours_ahead(request, offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + datetime.timedelta(hours=offset) return render_to_response('hours_ahead.html', {'hour_offset': offset, 'next_time': dt})
代码说明:current_datetime 视图函数显示当前时间。hours_ahead根据输入的值计算要显示的时间,这里作了容错处理,若是输入的非整型则返回一个404给用户。
templates/current_datetime.html 的代码以下:
# base.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> <h1>My helpful timestamp site</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>Thanks for visiting my site.</p> {% endblock %} </body> </html> # current_datetime.html {% extends "base.html" %} {% block title %}The current time{% endblock %} {% block content %} <p>It is now {{ current_date }}.</p> {% endblock %}
templates/hours_head.html 的代码以下:
{% extends "base.html" %} {% block title %}Future time{% endblock %} {% block content %} <p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p> {% endblock %}
urls.py函数代码以下:
from django.contrib import admin from django.urls import path from spider import views from books import views as bk from contact import views as ct urlpatterns = [ path('admin/', admin.site.urls), path('', views.hello), path('hello/', views.hello), path('time/', views.current_datetime), path('time/plus/<offset>/', views.hours_ahead), ]
代码说明: 导入视图views.py对应的视图函数,定义了两个url显示时间和日期并对应匹配到各个视图函数。