Добрый день!
При отправке через форму новости, Джанго выдаёт следующую ошибку:
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