为什么我们不通过任何论证来定义&views;。 - Django

时间:2017-05-18 01:48:30

标签: django

在Django项目中,当我们在viwes.py中定义一个函数时,它期望一个参数(称为request参数)。

views.py

from django.http import HttpResponse

def my_homepage_view(request):
    return HttpResponse("<h1>This is the homepage")

但在url.py中,当我们将my_homepage_view传递给url()函数时,我们不会将任何参数传递给my_homepage_view()函数。在这种情况下,我没有将任何参数传递给my_homepage_view()。但它运作良好。

url.py

from lern_django.views import my_homepage_view

urlpatterns = [
    url(r'^$', my_homepage_view)
]

请你能解释一下这怎么可能?

2 个答案:

答案 0 :(得分:0)

简单来说,当您在应用程序中请求页面时,django本身就会创建 HttpRequest对象并将其作为第一个参数绑定到负责的视图。

转到settings.py文件并找到以下内容:

ROOT_URLCONF = 'project.urls'

当您在django应用程序中请求页面时,会发生以下情况:

1)Django将查看您的settings.py文件并找到ROOT_URLCONF并确定要关注的网址

2)浏览器中的每个HTTPRequest都将URLCONF属性与其关联。

3)基于来自浏览器的HTTPRequest中的此URLCONF值,django将其映射到ROOT_URLCONF

4)Django然后在你的网址中查找urlpatterns并迭代所有网址并在第一次出现给定网址模式时存在。

5)并且,基于url映射,将加载给定视图。将使用HTTPRequest作为第一个参数调用视图。

答案 1 :(得分:0)

您在此处使用的url方法是配置Django应用程序以将该视图函数用于该URL。当Django处理请求时,它会将HTTP请求解析为Random#nextInt对象并将其传递给您的视图函数。