Seite 1 von 1

django url string an views.py def (request, string) übergebe

Verfasst: Montag 28. Februar 2011, 02:30
von nihilist
Hi,

ich versuche mein djangoprojekt so aufzubauen das ich als url

http://127.0.0.1/category/debian
("debian" ist der Kategoriename)

eingebe und ich dann alle Artikel einer Kategorie angezeigt bekomme
Leider funktioniert das nicht wenn ich die Kategorie als String eingebe:
(invalid literal for int() with base 10: 'debian')

Wenn ich die Kategorie-id verwende funktioniert es, gibt dann aber leider nicht so eine schöne url :)

urls..py

Code: Alles auswählen

[...]
   (r'^category/(?P<category>\w+)/$', 'blog.news.views.category'),
[...]
view.py

Code: Alles auswählen

def category(request, category):
    news = News.objects.filter(category=category)
[...]
Meine Vermutung ist das der Kategoriename als int bei der 'def category' ankommt, zumindest erkläre ich mir so die Fehlermeldung.
Wie kann ich den Kategorienamen als String verwenden, oder muss ich es per category_id machen und mir für die schöne url einen anderen Weg suchen?

Vielen Dank für etwaige Vorschläge.

Re: django url string an views.py def (request, string) über

Verfasst: Montag 28. Februar 2011, 02:32
von Leonidas
Da müsstest du uns schon sagen wie so ein News-Objekt aufgebaut ist…

Re: django url string an views.py def (request, string) über

Verfasst: Montag 28. Februar 2011, 03:05
von nihilist
models.py

Code: Alles auswählen

class Category(models.Model):
        name = models.CharField(max_length=100)
        onfrontpage = models.BooleanField()
        def __unicode__(self):
               return self.name



class News(models.Model):
        author = models.CharField(max_length=100)
        title = models.CharField(max_length=200)
        category = models.ForeignKey(Category)
        pub_date = models.DateTimeField('Datum',default=datetime.datetime.now)
        content = models.TextField("Inhalt")
        published = models.BooleanField()
        onfrontpage = models.BooleanField()
        def __unicode__(self):
                return self.title



Re: django url string an views.py def (request, string) über

Verfasst: Montag 28. Februar 2011, 09:38
von nemomuk

Code: Alles auswählen

news = News.objects.filter(category__name=category)

Re: django url string an views.py def (request, string) über

Verfasst: Montag 28. Februar 2011, 13:00
von nihilist
Funktioniert wie gewünscht.
Aber ich verstehe es nicht, wieso kann ich

Code: Alles auswählen

news = News.objects.filter(category='debian')
schreiben,
Aber wenn es übergeben wird muss ich
[code]
news = News.objects.filter(category__name=category)
schreiben
Eine kurze Erklärung bzw. ein Link zum lesen wäre nett.

Danke! :)

Re: django url string an views.py def (request, string) über

Verfasst: Montag 28. Februar 2011, 13:07
von Leonidas
Naja, es funktioniert ja nur so, weil der Parameter category halt die ID erwartet oder ein Category-Objekt.