2011-03-27 4 views
0

У меня есть жанр категории и суб жанровую категорию, и я пытаюсь использовать динамическую маршрутизацию, вот мой код:Django urls/slugs @ #!

модели:

from django.db import models 
from django.db.models import permalink 

class Genre(models.Model): 
    name = models.CharField(max_length=300) 
    slug = models.SlugField(max_length=150) 

def __unicode__(self): 
    return u'%s' % self.name 

@models.permalink 
def get_absolute_url(self): 
    return ('view_genre',(), { 'genre_slug' : self.slug }) 

class SubGenre(models.Model): 
    genre = models.ForeignKey(Genre) 
    name = models.CharField(max_length=300) 
    slug = models.SlugField(max_length=150) 

def __unicode__(self): 
    return u'%s' % self.name 

@models.permalink 
def get_absolute_url(self): 
    return ('view_subgenre',(), { 'subgenre_slug' : self.slug }) 

мои просмотров:

from django.template import Context, loader, RequestContext 
from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render_to_response, get_object_or_404 
from django.contrib.auth.decorators import login_required 
from django.core import serializers 

def index(request): 
    return render_to_response("home.html", context_instance=RequestContext(request),) 

def genre(request, slug): 
    genre = get_object_or_404(Genre, slug=genre_slug) 
    return render_to_response("genre.html", {'subgenre':  SubGenre.objects.filter(genre=genre)}, context_instance=RequestContext(request),) 

и мои ulrs:

from django.conf.urls.defaults import * 
from django.conf import settings 
# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
# Example: 
(r'^home/', 'home.views.index'), 
url(r'^home/(?P<genre_slug>[-\w]+)/$', 'home.views.genre', name='view_genre'), 
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), 

# Uncomment the admin/doc line below to enable admin documentation: 
# (r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
(r'^admin/', include(admin.site.urls)), 
) 

Я понятия не имел, почему маршрутизация не работает. Может, кто-нибудь может указать мне в правильном направлении?

+0

Что именно не работает? –

+0

URL-адрес не связан с моим представлением. –

+0

* Что * URL? Приведите пример. –

ответ

3

Несмотря на ваше нежелание приводить примеры URL-адресов, которые не работают, проблема, вероятно, в первом URL-адресе. Поскольку вы не закончили это с $, чтобы указать, что косая черта - это конец шаблона, он будет соответствовать всем URL-адресам, начинающимся с home/.

ли это вместо:

(r'^home/$', 'home.views.index'), 
+0

Это билет. –

+0

Я бы посоветовал перечислить ваши сопоставления url с наиболее конкретными в верхней части и получить более общий, когда вы спуститесь. Django выберет первый матч, поэтому, если на первом месте появятся более конкретные совпадения, простые ошибки, как это, вряд ли вызовут проблему. – jmichalicek

Смежные вопросы