如何设计 Django url 模式来避免 301

how to design Django url pattern to avoid 301

我有一个名为博客的项目,url 模式如下所示。我想让应用 "posts" 路由所有流量。

Url 模式如下:

#blog/urls.py
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin

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

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

#posts/url.py
from django.conf.urls import url
from django.contrib import admin

from .views import (
        home,
        down,
        get_data_by_post,
        )

urlpatterns = [
        url(r'^$', home, name='down'),
        url(r'^api/$', ins_down, name='api'),
        url(r'^p/(?P<slug>[-\w]+)/$', get_data_by_post, name='slug'),
        ]

进入首页后,posts.views中的首页函数会生成一些本地数据的链接进行渲染index.html。

def home(request):
    final = get_local_suggest()
    return render(request, "index.html", final)

index.html 模板中的部分代码如下所示:

<a href="p/{{ results.code }}?From=homepage" class="portfolio-link" target="_blank">

所以在主页中,一些链接会显示在那里:“http://example.com/p/code?From=homepage

但这里棘手的问题是:当我点击 url 时,Django 的控制台将打印如下所示的 301。在浏览器中,它将从“/p/code”重定向到“/p/code?From=homepage”。

Not Found: /p/code [17/Apr/2017 15:05:23] "GET /p/code?From=homepage HTTP/1.1" 301 0

一定是url模式设计有问题,如何避免再次发生?

谢谢!

您的 url 模式以斜杠结尾,因此您的 url 也应该如此。

为确保您始终将 url 指向规范 url 并避免重定向,请使用 {% url %} 模板标签:

<a href="{% url 'posts:slug' results.code %}?From=homepage" class="portfolio-link" target="_blank">

此处 'slug' 是您的 url 的名称,results.code 是 url.

的参数

您可以在您的视图中使用 request.GET.get('From', ''),并清理您的 url 模式。