Django删除尾部斜线-url或重定向

pn9klfpd  于 2022-12-24  发布在  Go
关注(0)|答案(2)|浏览(194)

我试图删除我的urls中的尾部斜杠,或者在末尾添加斜杠时进行重定向。我试图从Internet上的资源上执行此操作,但它对我不起作用。我想我做错了什么。

    • 网址. py-应用程序**
app_name = 'shop'
urlpatterns = [
    # product
    path('', views.product_list, name='product_list'),
    path('show/<slug:slug>', views.product_show, name='product_show'),
    path('<slug:category>', views.product_list, name='lst_by_ctgry'),
    path('<slug:category>/<slug:subcategory>', views.product_list, name='lst_by_subctgry'),
    path('<slug:category>/<slug:subcategory>/<slug:kind>', views.product_list, name='lst_by_knds'),
    # info - these urls doesn't work without slashes. works only with slashes
    path('pad', views.pad, name='pad'),
    path('guarantee', views.guarantee, name='guarantee'),
    path('contacts', views.contacts, name='contacts'),
    path('about', views.about, name='about'),
    path('privacy', views.privacy, name='privacy')
]
    • 网址. py-项目**
urlpatterns = [
    path('', include('orders.urls')),
    path('', include('cart.urls')),
    path('', include('shop.urls')),
    path('admin/', admin.site.urls),
]
    • 设置. py**
APPEND_SLASH = False
REMOVE_SLASH = True
MIDDLEWARE = [
    ...
    'django.middleware.common.CommonMiddleware',
    ...
]

请你给一个例子,我怎么才能删除所有网址尾随斜线或获得重定向

4c8rllxm

4c8rllxm1#

虽然建议使用尾部斜杠,但是如果你不想使用,你可以在你的项目的settings.py文件中修改它。

    • 设置. py**
APPEND_SLASH = False

默认值为True
参见文档。

vhipe2zx

vhipe2zx2#

我认为目前得票最高的答案,并没有真正回答提出的问题。
默认情况下(APPEND_SLASH = TRUE),如果Django找不到一个请求的URL(比如https://smartavery.com/about),它会寻找相同的URL并附加一个斜杠(比如https://smartavery.com/about/),如果找到,则重定向到它(301).改变这个默认行为(APPEND_SLASH = FALSE)只会导致Django发送一个404错误而不是301重定向.
OP问的是相反的问题。“我怎样才能删除尾部斜杠或者获得重定向?"。我的(* unhelped )答案是检查你的代码库,从URL定义中删除尾部斜杠。Django不会为你“修复”它。
Django的一个惯例是建议始终使用尾随斜杠(
我不太喜欢 *)。Here是Google关于这个主题的更广泛的讨论。历史上,尾随斜杠意味着目录,没有尾随斜杠意味着文件。
我个人喜欢我的URL没有一个尾随斜线,但作为Django中的一个实际问题

  • 如果你用一个斜杠定义了所有的URL,而一些客户端来找一个没有斜杠的URL,他们不会有问题,因为Django会自动将他们重定向到一个有斜杠的URL
  • 如果你的网址没有斜杠,而客户端却找了一个带斜杠的网址,那他们就不走运了,Django会给予他们一个“404未找到”的提示。

相关问题