2016-03-31 11 views
0

Ich habe stundenlang meinen Kopf gegen die Wand geschlagen und es ist wahrscheinlich unglaublich einfach.Dynamisch erstellen Django URL Slug in der funktionsbasierten Ansicht

Ich brauche zwei URL-Slugs von einem Modell zu generieren. Einer wird eigentlich Slug genannt und ist ein SlugField, das für den Produkttitel steht, und der andere ist eine Kategorie, die ein ForeignKey ist.

Im Idealfall, was ich haben möchte ist

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

Aber der Kategorie Teil der URL Geben hält eine „ungültig wörtliche für int zu erzeugen() mit Basis 10:‚Kategorie‘- na ja, diese ist einer der Fehler, ich viele verschiedene Kombinationen ausprobiert.

Modell

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

anzeigen

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}) 

Vorlage

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

URL

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

Ugh ... sehen, wie/tools/ist hartcodiert?

Vielen Dank für Ihre Hilfe.

Antwort

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'), 

Ansicht

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}) 

Sollte es funktionieren wird nicht getestet.

+0

Abfrage nach Name funktionierte für mich! Vielen Dank. Ich habe 'category = t.category' zu meinem URL-Pfad hinzugefügt. –

1

In URL nur Parameter Slug übergeben, aber auf URL Tag übergeben Sie zwei Parameter. Nur ändern wie als Vorlagen

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

Wenn Slug int ist, können wir url

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

Einige Beispiel über ändern, wie dynamische Parameter auf URL-Tag übergeben https://docs.djangoproject.com/en/1.9/intro/tutorial04/

Verwandte Themen