如何设计 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 模式。
我有一个名为博客的项目,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 模式。