我不明白Django的path()如何工作

时间:2018-10-17 01:10:46

标签: python django python-3.x django-rest-framework

我尝试查看文档,并阅读了同一主题的几个问题,但无法解决。我一直在尝试按照本教程进行操作,尽管我已经走了很远,但是我仍然无法理解path函数的作用。

此代码段有什么作用?

path('', views.index, name='index'),

这个呢?

path('books/', views.BookListView.as_view(), name='books'),

还是这个?

path('catalog/', include('catalog.urls')),

1 个答案:

答案 0 :(得分:0)

假设您位于根项目目录中,也就是说,拥有settings.py的目录...如果以下path()位于urls.py内,只要您有from . import views在您的导入中...此path()函数意味着当您在终端中python manage.py runserver并获得127.0.0.1:8000/时,以下path()将是主页,或127.0.0.1:8000/。如果您希望它通过(默认路径如下)(如下面的path()一样)用于默认的成功页面,则需要在您的代码中添加一个名为index的函数同一目录的views.py。

path('', views.index, name='index'),

以下是基于类的视图。由于您是新手,所以我强烈建议您远离他们。当我一无所知时,由于没有明显的控制流程,它们使一切变得更加混乱,因此我不知道它们如何工作。但是要回答您的问题,它与上述操作相同,但是如果在开发服务器运行时在浏览器中键入127.0.0.1:8000/books,则会触发基于类的视图(function),只要您想链接到它以供用户单击,就可以称为books

path('books/', views.BookListView.as_view(), name='books'),

最后一个表示您已使用python manage.py startapp catalog在终端中创建了一个名为“ catalog”的应用。完成此操作后,您将必须在该应用程序文件夹中创建一个urls.py文件,然后可以在该文件夹中创建特定于该应用程序的urlpatterns。例如,127.0.0.1:8000/catalog将是目录应用程序的“主页”。但是,您在目录应用程序的urls.py中放入的任何urlpattern都只需要类似path('games/', views.games, name='games') (以举例说明游戏目录)

但是此应用程序在此文件中的path()会自动在其前面加上/catalog/。因此,上面的games/示例实际上是127.0.0.1:8000/catalog/games/。只要您将视图设置为该目录,就会触发视图(功能)提供游戏目录。

为使其更有效,以便您可以正确引用url而不会混淆它们,请在此目录应用程序的urls.py文件中,将app_name = 'catalog'放在url模式上方。然后,您可以像{% url 'catalog:view_name' %}

那样引用它们
path('catalog/', include('catalog.urls')),

如果这仍然令人困惑,我强烈建议您在udemy.com上查看适用于Django 2的内容。经过一番尝试,它将大有帮助。