2013-06-08 2 views
0

Я использую Django 1.4.5.Django NoReverseMatch и пустая страница

Я получаю Ошибка, когда я получаю доступ к деталям ввода через страницу администратора.

"NoReverseMatch в/админ/г/12/1 /": Reverse для 'подробно' с аргументами '()' и именованных аргументов '{' категории ': u'category', «слизняка ': u'entry-тест'}»не найден

И получить ничего/пустую страницу когда доступ деталь входа на странице фронта (/ категория/запись тест /).

И что такое право моделей & URL-адрес шаблона, если я хочу получить доступ к деталям записи через подкатегорию (/ category/subcategory/entry-test /)?

Модель сниппет:

class Entry (models.Model): 
    title = models.CharField() 
    slug = models.SlugField() 
    category = models.ForeignKey('entry.Category') 

    def __unicode__(self): 
     return self.title 

    @models.permalink 
    def get_absolute_url(self): 
     return ('entry.views.detail',(), {'category': self.category.slug, 'slug': self.slug}) 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) 
     return super(Entry, self).save(*args, **kwargs) 

class Category(models.Model): 
    title = models.CharField() 
    slug = models.SlugField() 
    parent = models.ForeignKey('self', blank=True, null=True, related_name='children') 

    def __unicode__(self): 
     if self.parent: 
      return self.parent.title, self.title 
     return self.title 

    @permalink 
    def get_absolute_url(self): 
     return ('entry.views.category',(), {'slug': self.slug}) 

Просмотров фрагмент кода:

def category(request): 
    category = Category.objects.all() 
    return render_to_response('category.html', locals(), context_instance=RequestContext(request)) 

def list(request, slug_id): 
    category = get_object_or_404(Category, slug=slug_id) 
    list = Entry.objects.filter(category=category) 
    return render_to_response("list.html", locals(), context_instance=RequestContext(request)) 

def detail(request, category_id, slug_id): 
    entry = Entry.objects.filter(slug=slug_id) 
    category = Category.objects.filter(slug=category_id) 
    return render_to_response('detail.html', locals(), context_instance=RequestContext(request)) 

URL-фрагмент кода:

urlpatterns = patterns('entry.views', 
    (r'^$', 'category', name='entry-category'), 
    url(r'^(?P<slug_id>[-\w]+)/$', 'list', name='entry-list'), 
    url(r'^(?P<category_id>[-\w]+)/(?P<slug_id>[-\w]+)/$', 'detail', name='entry-detail'), 

шаблона фрагмент кода:

category.html

<ul> 
{% for category in category %} 
<li><a href="{{ category.slug }}">{{ category.title }}</a> ({{ category.entry_set.all.count }})</li> 
{% endfor %} 
</ul> 

list.html

<ul> 
{% for entry in list %} 
<li><a href="{{ entry.slug }}">{{ entry.title }}</a></li> 
{% endfor %} 
</ul> 

detail.html

<ul> 
{% for entry in entry.category %} 
<li><a href="{{ entry.category }}/{{ entry.get_absolute_url }}">{{ entry.title }}</a> 
<br />{{ entry.description }}</li> 
{% endfor %} 
</ul> 

Где и что я могу делать неправильно? Если кто-нибудь может помочь, я буду благодарен! Пожалуйста, помогите мне.

ответ

0

я маленькая ошибка на шаблоне детали:

<ul> 
    {% for entry in entry %} 
    <li> 
     <a href="{{ entry.get_absolute_url }}">{{ entry.title }}</a> 
     <br /> 
     {{ entry.description }} 
    </li> 
    {% endfor %} 
</ul> 

Задача решается в настоящее время.

2

Ваши ключевые аргументы для URL являются category_id и slug_id, но вы передаете в category и slug в методе get_absolute_url. Эта версия должна работать:

@models.permalink 
    def get_absolute_url(self): 
     return ('entry.views.detail', 
       (), {'category_id': self.category.slug, 'slug_id': self.slug}) 

Также рассмотрите возможность переименования ваших аргументов. id обычно является числовым и slug является буквенно-цифровым.

Для болванки задачи страницы (от Вашего комментария):

Вашего URL /category/entry-test/ - это будет отображаться на ваш взгляд детали, если фрагмент ваш вставил в своем вопросе в главном urls.py. Если у вас нет соответствующих результатов (звонок .filter() не имеет результатов), вы увидите «пустую» страницу, потому что у <ul> не будет никаких li элементов.

Если в главном urls.py, у вас есть что-то вроде url('^category/', include(some.other.urls)), то URL будет отображаться в вашей list зрения, и у вас есть один и тот же вопрос - .filter() не возвращает никаких результатов, и, следовательно, вы видите «пустой» страницы ,

+0

Спасибо Burhan, ошибка исчезла, но все еще пустая страница. – pije