2017-04-17 57 views
0

我有一個名爲blog的項目,url模式如下所示。我想讓應用程序「帖子」路由所有的流量。如何設計Django的url模式以避免301

他們的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」

未找到:/ P /碼[17 /月/ 2017年15時05分23秒] 「GET /P /代碼從主頁= HTTP/1.1?」 301 0

有一定是壞用url模式設計,如何避免它再次發生?

謝謝!

回答

1

您的網址格局以斜線結尾,因此您的網址也應該如此。

爲確保您始終指向你的網址,以規範網址,避免重定向,使用{% url %}模板標籤:

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

這裏'slug'是您的網址的名稱,results.code是一個參數的URL 。

+0

感謝您的回覆。在這種情況下,「slug」似乎不起作用。在模板渲染過程中出錯 在模板/home/ubuntu/workspace/templates/index.html中,第50行有錯誤 帶有參數''的'slug'反轉'(u'BI3nsz4BBnV',)'和關鍵字參數'{}'找到。 0模式嘗試:[] –

+1

@TonyWang對,我錯過了命名空間。試試''帖子:slug''來代替。 – knbk

+0

非常感謝,它的工作原理! –

0

你可以在你的視圖中使用request.GET.get('From',''),並清理你的url模式。

相關問題