2016-03-31 6 views
0

私は数時間壁に頭を突きつけていました。関数ベースのビューで動的にDjango URLスラッグを作成する

1つのモデルから2つのURLスラッグを生成する必要があります。 1つは実際にはスラッグと呼ばれ、商品タイトル用のSlugFieldであり、もう1つはForeignKeyであるカテゴリです。これは、よく - 『カテゴリ』:私が持っているしたいと思いますどのような理想的

は「ベース10と、INT()のリテラル無効を生成与え続け

url(r'^products/(?P<category>[^\.]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'), 

しかし、URLのカテゴリ一部であり、私は多くの異なる組み合わせを試してみましたエラーのいずれか、である。

モデル

... 
slug = models.SlugField() 
category = models.ForeignKey(Category) 
... 

見ます

def tool_detail(request, slug): 
    tool = get_object_or_404(Tool, slug=slug) 
    part = get_object_or_404(Part) 
    return render(request, 'tool_detail.html', {'tool': tool, 'part': part}) 

テンプレート

<a href="{% url 'tool_detail' t.category slug=t.slug %}" ... </a> 

URL

url(r'^products/tools/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'), 

がうわ...どのように/ツール/ハードコードされて参照してください?

ありがとうございました。

答えて

2

URL

# query by primary key. 
url(r'^products/(?P<category>[0-9]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'), 

# query by the name. 
url(r'^products/(?P<category>[\w]+)/(?P<slug>[^\.]+)/$', tool_detail, name='tool_detail'), 

ビュー

def tool_detail(request, **kwargs): 
    tool = get_object_or_404(Tool, slug=kwargs.get('slug')) 
    part = get_object_or_404(Part) 
    return render(request, 'tool_detail.html', {'tool': tool, 'part': part}) 

は、それがテストされていません動作するはずです。

+0

質問は私のために働いた!ありがとうございました。私は 'category = t.category'を自分のurlパスに追加しました。 –

1

URLではパラメータslugを渡しますが、urlタグでは2つのパラメータを渡します。スラグがintである場合にのみ、我々は、URLに

url(r'^products/tools/(?P<slug>[0-9]+)/$', tool_detail, name='tool_detail'), 

URLタグに動的パラメータを渡す方法についていくつかの例を変更することができます としてテンプレート

<a href="{% url 'tool_detail' t.slug %}" ... </a> 

のように変更 https://docs.djangoproject.com/en/1.9/intro/tutorial04/

関連する問題