2017-03-02 8 views
0

モデルオブジェクトのidをそのオブジェクトの詳細ビューのURLに使用する方法を示したYouTubeチュートリアルを見ていて、同じ概念を適用しようとしましたすべての 'id'を 'slug'(私のモデルスラッグフィールドの名前)に置き換えることによって、スラッグフィールドに移動します。 /ダッシュボード/時モデルオブジェクトのDjango - SlugフィールドがURLに適用されていない

NoReverseMatch 引数付き「キャンペーン-詳細」「(」「」)とキーワード引数 『{}』が見つかりませんのリバース - しかし、これは単にエラーを持ち出すために起こります。 1つのパターン(S) 試してみました:[ '(?I)ダッシュボード/キャンペーン/(?P /スラッグ[ - D] + \ W \)/ $']

views.py:

def campaign_detail(request, campaignprofile_slug): 
    if request.user.is_authenticated: 
     campaignprofile = get_object_or_404(CampaignProfile, slug=campaignprofile_slug) 
     return render(request, 'campaign-detail.html', {'campaignprofile': campaignprofile, 'slug': slug}) 
    else: 
     return redirect('/users/login/next?=') 

urls.py:私は、ディスプレイにしようとしているモデルオブジェクトの

url(r'^campaigns/(?P<slug>[-\w\d]+)/$', views.campaign_detail, name='campaign-detail') 

models.py:

class CampaignProfile(models.Model): 
    user = models.ForeignKey(UserModel, related_name='campaignprofile', on_delete=models.CASCADE, null=True) 
    campaign_title = models.CharField(max_length=50, verbose_name='Title') 
    slug = models.SlugField(unique=True, blank=True, null=True) 

HTMLテンプレートのhrefタグ:

<a href='{% url "campaign-detail" slug %}'></a> 

この問題の潜在的な解決方法は素晴らしいと思います。

+0

'slug': slugの名前を変更?それは何を送信していますか? –

+1

ちょっとしたヒント:ユーザーがログインしている場合は、すべてのビューをチェックインするのではなく、djangosデコレータ@login_requiredを使用してください。 – Jingo

+0

@DanielRosemanどういう意味ですか?私は 'slug'を私のviews.pyの変数 'slug = campaignprofile.slug'として変数に入れていますが、以前と同じNoReverseMatchエラーが発生しているようです。 – jayt

答えて

0

2つのこと:

1)あなたは、テンプレート内のURLに渡しているslugは空の文字列であるように思われ、urls.pyであなたのコードは、エラーが発生したことを処理しません。

2)あなたは1を修正したら、あなたは追加のエラーを防ぐために、ビュー関数の第二引数と同じ名前を持っているあなたのurls.pyの正規表現でslug変数を作成する必要があります。

+0

URLのコードはどのように 'slug'テンプレートを処理する必要がありますか? – jayt

0

返されたコンテキストで間違った変数名を使用しているようです。

return render(request, 'campaign-detail.html', {'campaignprofile': campaignprofile, 'slug': slug})

`その最後のテンプレートに到着slug`され、どのように'slug': campaignprofile_slug

関連する問題