Делаю django ЧПУ с помощью slug но выдает ошибку

160
12 мая 2021, 22:30

Я хочу чтобы url выводилося названия статьи типо programs/kak-vzlomat-jopu или как то так. И еще настораживает то что как рагумент берет slug : 13 а это вообще из другой колонки в database

Traceback:
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  143.                 response = response.render()
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render
  171.                     return self._render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\loader_tags.py" in render
  150.             return compiled_parent._render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in _render
  163.         return self.nodelist.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\loader_tags.py" in render
  62.                 result = block.nodelist.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render
  937.                 bit = node.render_annotated(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\base.py" in render_annotated
  904.             return self.render(context)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\defaulttags.py" in render
  443.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\urls\base.py" in reverse
  90.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "D:\Users\MAestro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
  668.         raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /programms/
Exception Value: Reverse for 'article_detailProgramms' with keyword arguments '{'slug': '13'}' not found. 1 pattern(s) tried: ['programms/(?P<slugProg>[-a-zA-Z0-9_]+)/$']

views.py

class ProgramsList(ListView):
    model = Programs
    template_name = 'programs/programms.html'
    paginate_by = 6
    def get_context_data(self, **kwargs):
        context = super(ProgramsList, self).get_context_data(**kwargs)
        list_exam = Programs.objects.all()
        paginator = Paginator(list_exam, self.paginate_by)
        page = self.request.GET.get('page')
        try:
            file_exams = paginator.page(page)
        except PageNotAnInteger:
            file_exams = paginator.page(1)
        except EmptyPage:
            file_exams = paginator.page(paginator.num_pages)
        context['articles_top'] = Programs.objects.all().order_by('?')[:6]
        context['list_exams'] = file_exams
        return context

def ProgramsDetail(request, slugProg):
    Articles.objects.filter(slug=slugProg)
    programm_details = Articles.objects.filter(slug=slugProg).first()
    top_art = Articles.objects.all().order_by('-view')[:10]
    top_prog = Programs.objects.all().order_by('?')[:10]
    return render(
        request,
        'programs/programm.html',
        {
           'programm_details': programm_details,
            'top_art':top_art,
            'top_prog':top_prog,
        }
    )

urls.py

    urlpatterns=[
        path('', ProgramsList.as_view(), name='articles_listProgramms'),
        path('<slug:slugProg>/', views.ProgramsDetail, name='article_detailProgramms'),
        path('searchProgramm/', views.post_search, name='post_searchProgramm'),
    ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
class Programs(models.Model):
    title = models.CharField(max_length=200, verbose_name='Название Программы')
    storyPrograms = models.TextField(default='' , verbose_name='Расширенное описание, функционал и т.д')
    previewPrograms = models.ImageField(upload_to='' , verbose_name='Каритинка 260х180')
    slugProg = AutoSlugField(populate_from='title')
    languegesPrograms = models.TextField(default='' , verbose_name='языки которые поддерживает программа')
    demandPrograms = models.TextField(default='' , verbose_name='Требования')
    memoryPrograms = models.TextField(default='' , verbose_name='Место, на жестком диске')
    uploadPrograms = models.TextField(default='' , verbose_name='Сыллка с установкой')
    downlandCount = models.IntegerField(default=0)
    date = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = 'Программы'
        verbose_name_plural = 'Программы'
    def __str__(self):
        return self.title

в шаблоне передаю slug в url вот так

  <a href="{% url 'article_detail'  slug=top.slugProg %}"> 
Answer 1

Как пример мой вариант. Все лишнее удалено )

model.py (обрати внимание на get_absolute_url)

class Post(models.Model):
    title = models.CharField(max_length=120,
                             verbose_name='Title')
    slug = models.SlugField(unique=True, verbose_name='URL')
    def __unicode__(self):
        return self.title
    def __str__(self):
        return self.title
    def get_absolute_url(self):
        return "/post/%s/" % (self.slug)

url.py (попробуй изменить адрес на /категория/slug были на этом как то проблемы)

path('post/<slug:slug>/', views.DetailPost.as_view(), name='detail'),

view.py попробуй через CBV.

class DetailPost(DetailView):
    model = Post
    template_name = 'detail.html'

в admin.py строка prepopulated_fields = {'slug': ('title',)} позволяет сделать автозаполнение поля slug на основе title

Answer 2

В admin.py в класс админа необходимо ввести строку prepopulated_fields = {'slug': ('title',)}

READ ALSO
Есть ли аналог GetKeyDown , но с touch

Есть ли аналог GetKeyDown , но с touch

Есть ли аналог GetKeyDown , но с тачамиУже пару часов роюсь в инете ,но так и не смог найти

302
Как получить все обработчики события из EventInfo?

Как получить все обработчики события из EventInfo?

Как через рефлексию получить все обработчики события? Ведь, когда я добавляю обработчик, он должен сохраняться в какое-то приватное поле

96
как вывести значения WaitForSeconds в unity c#

как вывести значения WaitForSeconds в unity c#

как показать отсчет времени при запуске/перезапуске сцены?

166
Миграция переводит названия таблиц в нижний регистр

Миграция переводит названия таблиц в нижний регистр

Проект ASPNET Core WebAPI, ORM EF Core, база данных MySQL, провайдер Pomelo

99