Django: werte aus urlpatterns in generic view

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Dienstag 4. November 2008, 00:28

hi ihr lieben leute,

Ich frickel grad nen bissle mit django rum und frage mich wie ich folgendes hinbekomme:

Code: Alles auswählen

from django.conf.urls.defaults import *

from models.entry import Entry

startpage = {
	'queryset': Entry.objects.order_by('-created_at')[0:10],
	'template_name' : "blog/index.html",
}

category_set = {
	'queryset': lambda category: Entry.objects.filter(category__permalink_exact=category).order_by('-created_at')[0:10],
	'template_name': 'blog/category.html'
}

show_entry = {
	'slug_field': 'permalink',
	'template_name': 'blog/show_entry.html'
}

urlpatterns = patterns('',
	url(r'^$', 'django.views.generic.list_detail.object_list', startpage, name='start'),
	url(r'(?P<category>[\d\w-]+)', 'django.views.generic.list_detail.object_detail', category_set, name='category'),
	url(r'(?P<category>[\d\w-]+)/(?P<permalink>[\d\w-]+)$', 'django.views.generic.list_detail.object_detail', name='show_entry'),
)
Wie bekomm ich die Category aus dem regexp in das dict zum queryset?

waere toll wenn jemand ne Idee haette ... das muss doch irgendwie schoen gehen ... sollte doch was recht gewohnliches und haeufig benutzes sein...

gruessle

P.S. das mit dem lambda was ich grad stehen hab geht nicht
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Dienstag 4. November 2008, 10:09

Ich würde eine eigene view-Funktion dafür basteln.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 5. November 2008, 10:06

Ein generic view kann das nicht. Diese sind aber so simpel, dass ich nie wirklich verstanden habe, was die großartig einsparen und würde daher einfach einen eigenen bauen. Du kannst ja auch dann an das Original deligieren:

Code: Alles auswählen

from django.views.generic.list_detail import object_list

def v(request, queryset, category=None, **kwargs):
    if category: queryset = queryset.filter(category=category)
    return object_list(queryset, **kwargs)
Übrigens, \w enthält \d.

Stefan
Antworten