2017-04-17 12 views
0

私はブログと呼ばれるプロジェクトを持って、URLのパターンは以下のとおりです。私はすべてのトラフィックをルーティングするために、アプリの「投稿」を作りたいと思っています。それらの避けるためにDjangoのURLパターンを設計する方法

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/4月/ 2017年夜03時05分23秒] "? /P /コードを取得=ホームページのHTTP/1.1から" 301 0

ありますが何か間違っている必要がありURLパターンのデザインで、それが再び起こったのを避ける方法は?

ありがとうございます!

答えて

1

あなたのURLパターンはスラッシュで終わっていますので、あなたのURLも同様です。

あなたは常に正規のURLにあなたのURLを指すとリダイレクトを避けるため、{% url %}テンプレートタグを使用していることを確認するには:ここで

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

'slug'は、あなたのURLの名前であり、そしてresults.codeは、URLの引数であります。

+0

ご返信ありがとうございます。この場合、「slug」は動作しないようです。テンプレートレンダリング中にエラーが発生しました テンプレート/home/ubuntu/workspace/templates/index.html、行50でエラーが発生しました 引数 '(u'BI3nsz4BBnV'、)およびキーワード引数 '{}'を使用して 'slug'見つかりました。 0個のパターンが試されました:[] –

+1

@TonyWangそうですね、私は名前空間が欠けていました。代わりに '' posts:slug''を試してみてください。 – knbk

+0

偉大なおかげで、それは動作します! –

0

ビューでrequest.GET.get( 'From'、 '')を使用して、URLパターンを消去できます。

関連する問題