在Django中组织网址

时间:2019-07-10 18:44:06

标签: python django django-rest-framework django-urls

我的网址有问题,首先是我的urls.py:

from .views import (
    CouponListView, CouponDetailView, buy_coupon, UserCouponListView, CouponOnResaleCreateView,
    CouponOnResaleListView,
) 

from django.urls import path

coupons_patterns = ([
    path('', CouponListView.as_view(), name = 'list'),
    path('<int:pk>/<slug:slug>/', CouponDetailView.as_view(), name = 'detail'),
    path('create/<int:pk>/<slug:slug>/', CouponOnResaleCreateView.as_view(), name = 'create'),
    path('<slug:slug>/', UserCouponListView.as_view(), name = 'user'),
    path('coupon/<int:pk>/<slug:slug>/buy/', buy_coupon, name = 'buy_coupon'),

], 'coupons')

好吧,我想添加另一个网址“模式”,也就是说,我拥有的网址“模式”是:coupons:name,我想添加一个这样的网址:{{1 }},但不必创建其他应用。

我应该怎么做?我想到要创建其他模式,就像我之前展示的那样并包含它,但这是一种好习惯吗?还有其他方法吗?

我想要URL中的可伸缩,干净且易于维护的结构。


更新::

我是通过这种方式发生的,但是并不能说服我很多:

coupons_on_resale:name

谢谢您的建议!

1 个答案:

答案 0 :(得分:0)

我找到了一种以自己喜欢的方式来构造我的url的方法,并且对我来说,如何构造这些url似乎很干净,这里是代码:

from .views import (
    CouponListView, CouponDetailView, buy_coupon, UserCouponListView, UserCouponDetailView, 
    CouponOfResaleCreateView, CouponOfResaleListView, CouponOfResaleDetailView
) 

from django.urls import path, include

coupon_patterns = ([
    path('', CouponListView.as_view(), name = 'list'),
    path('<int:pk>/<slug:slug>/', CouponDetailView.as_view(), name = 'detail'),
    path('<int:pk>/buy/<slug:slug>/', buy_coupon, name = 'buy-coupon'),    

], 'coupon')

user_patterns = ([
    path('', UserCouponListView.as_view(), name = 'list'),
    path('<slug:slug>/', UserCouponDetailView.as_view(), name = 'detail'),

], 'user_coupon')

resale_patterns = ([
    path('', CouponOfResaleListView.as_view(), name = 'list'),
    path('<int:pk>/<slug:slug>/', CouponOfResaleDetailView.as_view(), name = 'detail'),
    path('create/<int:pk>/<slug:slug>/', CouponOfResaleCreateView.as_view(), name = 'create'),

], 'resale')

urlpatterns = [
    path('', include(coupon_patterns)),
    path('resale/', include(resale_patterns)),
    path('<slug:slug>/', include(user_patterns)),
]

那么,您如何看待这种结构?这是不好的做法吗?让我知道您的意见,任何建议都可以帮助我学习。