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

Django, Flask, Bottle, WSGI, CGI…
Antworten
nihilist
User
Beiträge: 28
Registriert: Dienstag 13. Februar 2007, 07:02

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Da müsstest du uns schon sagen wie so ein News-Objekt aufgebaut ist…
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nihilist
User
Beiträge: 28
Registriert: Dienstag 13. Februar 2007, 07:02

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


nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

news = News.objects.filter(category__name=category)
nihilist
User
Beiträge: 28
Registriert: Dienstag 13. Februar 2007, 07:02

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! :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, es funktioniert ja nur so, weil der Parameter category halt die ID erwartet oder ein Category-Objekt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten