Django:点 url 在应用程序的根后面?

Django: point url behind root of app?

我正在阅读 Django 的教程 (Django tutorial part 3),我正在添加视图和 urls。

在此演示应用程序中,他们为民意调查添加了子视图,例如/polls/34/ 进入第 34 轮投票。引自教程:

When somebody requests a page from your website – say, “/polls/34/”, Django will load the mysite.urls Python module because it’s pointed to by the ROOT_URLCONF setting. It finds the variable named urlpatterns and traverses the regular expressions in order. After finding the match at '^polls/', it strips off the matching text ("polls/") and sends the remaining text – "34/" – to the ‘polls.urls’ URLconf for further processing. There it matches r'^(?P<question_id>[0-9]+)/$', resulting in a call to the detail() view like so:

我的问题如下:

假设您有一个与您的应用程序相关的视图,但是 url - 以应用程序名称为前缀 - 没有新视图本身那么有意义。您如何使视图(它是应用程序的一部分)从新路径名开始。

这可能令人困惑,所以这里有一个例子。

假设您有一个应用程序(套牌)供​​用户使用一组卡片制作套牌。然后 /deck/regex 会带你到给定的牌组。如果有人想在牌组中查看有关一张牌的更多信息,那么 /decks/cards/regex 就没那么有意义了 /cards/regex 因为一张牌可以在多个牌组中。

这不是一个完美的例子,但我认为它突出了我正在尝试做的事情。

你所说的很容易做到,但没有做到,因为它会导致路由方面的很多混乱。

谈论你的套牌例子。假设您在一个名为 decks 的应用程序中,根 urls.py 文件是这样的:

from django.conf.urls import url,include
from django.contrib import admin
from Decks import views as deckviews


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'/cards/regex^$',deckviews.get_card_information),
    url(r'^decks/',include('deckviews.urls')),

 ]

Decks 应用中的 urls.py 可以是:

from django.conf.urls import url,include
import views

urlpatterns = [
    url(r'^regex/',views.generate_decks)

 ]

这是一个生成牌组的示例,decks/regex 从牌组应用程序的 urls.py 中调用生成随机牌组,同时您获得所需的 cards/regex 指向decks 应用程序中的视图,但仍然具有您想要的 url。

通过这种方式,您可以将任何 url 路由到任何函数,这就是 django 的优点。这很少使用,因为当应用程序变得越来越大和越来越复杂时,它会造成很多混乱。

希望这对您有所帮助。干杯!

我有一些 URL 给你: 第一名:

# The url in Projects, which you have to include to link your app.
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^table/', include('table.urls')),
]

现在这个大写字母就是您的代码:

# So you can change is to:
urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^', include('table.urls',namespace="table")),
]

然后:在tables.urls.py你可以做任何你想做的事情:

urlpatterns = [ url(r'^$', views.index, name='index'),
     url(r'^decks/(?P<pk>.*)$', views.decksView, name='decksView'),
     url(r'^card/(?P<pk>.*)$', views.cardView, name='cardView'),
]