@Vlad1987
учу Python

Как исправить ошибку NoReverseMatch at /?

Добрый день!
При отправке через форму новости, Джанго выдаёт следующую ошибку:
Reverse for 'view_news' with keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['news/(?P<slug>[-a-zA-Z0-9_]+)/$']

На самом деле в интернете много чего написано по этой проблеме, но я так и не понял как применить полученные там советы. На сколько я понимаю по умолчанию, после отправки новости должно происходить перенаправление в зависимости от того, что прописано в get_absolute_url модели, отвечающей за новость. Так же, я вычитал, что может помочь указание метода get_success_url, но либо я не правильно им воспользовался, либо он тоже не работает.

Объясните, пожалуйста, как можно исправить данную проблему. Я понимаю, что дело в слаге, но не понимаю куда смотреть.

Это Вьюха Формы:
class CreateNews(CreateView): 
    form_class = NewsForm
    template_name = 'news/add_news.html'
    extra_context = {'unwanted_link': template_name}

    def get_success_url(self):
        return reverse('view_news', kwargs={'slug': self.object.slug})


Это Модель Новости:
class News(models.Model):
    title = models.CharField(max_length=150, verbose_name='Наименование')
    slug = models.SlugField(max_length=200, db_index=True, unique=True, verbose_name='URL')
    content = models.TextField(blank=True, verbose_name='Контент')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата публикации')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Обновлено')
    photo = models.ImageField(upload_to='photos/%Y/%m/%d/', verbose_name='фото', blank=True)
    is_published = models.BooleanField(default=True, verbose_name='Опубликовано')
    category = models.ForeignKey('Category', on_delete=models.PROTECT, verbose_name='Категория')
    views = models.IntegerField(default=0)

    def get_absolute_url(self):
        return reverse('view_news', kwargs={'slug': self.slug})


Это путь url.py для view_news:
path('news/<slug:slug>/', ViewNews.as_view(), name='view_news'),


Это Вьюха Конкретной новости:
class ViewNews(DetailView):  
    model = News
    context_object_name = 'news_item'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['unwanted_link'] = 'news/news_detail.html'
        return context
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@bacon
Почему у тебя slug оказался пустой строкой?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы