#django #django-models #django-views
#django #django-модели #django-просмотры
Вопрос:
Однако я знаю, что мое мнение верно, когда я вставляю {% url 'sub_detail' subc.id %}
в index.html это внезапно выдает ошибку отсутствия обратного совпадения. Как только я удаляю его, индекс работает нормально. Я попытался изменить идентификатор, но это ничего не изменило, поскольку оно по-прежнему выдает ту же ошибку. Заранее спасибо.
views.py:
from django.shortcuts import render, redirect, reverse, get_object_or_404
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import Slides, MainContent, SubContent
from .forms import TitleForm, SubContentForm, SlidesForm
def index(request):
slides = Slides.objects.all()
maincontent = MainContent.objects.all()
subcontent = SubContent.objects.all()
context = {
'slides': slides,
'maincontent': maincontent,
'subcontent': subcontent,
}
return render(request, 'home/index.html', context)
def sub_detail(request, subc_id):
subcontent = get_object_or_404(SubContent, pk=subc_id)
context = {
'subcontent': subcontent,
}
return render(request, 'home/sub_detail.html', context)
urls.py:
path('', views.index, name='home'),
path('<int:subc_id>/', views.sub_detail, name='sub_detail'),
path('manage/', views.manage, name='manage'),
path('slides/', views.slides, name='slides'),
path('title/', views.add_title, name='add_title'),
path('sub/', views.add_sub_content, name='add_sub_content'),
]
models.py:
class SubContent(models.Model):
class Meta:
verbose_name_plural = 'Sub Content'
title = models.CharField(max_length=28, null=False, blank=False)
image = models.ImageField()
description = models.TextField()
def __str__(self):
return self.title
index.html:
<a href="{% url 'sub_detail' subc.id %}">
<div class="col-md-6 section-index-img">
<img src="{{ sub.image.url }}" class="rounded img-fluid" alt=""/>
</div>
</a>
код ошибки:
Environment:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 3.1
Python Version: 3.8.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'home',
'crispy_forms',
'products']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template /workspace/hunt-interiors/templates/base.html, error at line 0
Reverse for 'sub_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['(?P<subc_id>[0-9] )/$']
1 : <!doctype html>
2 : {% load static %}
3 :
4 :
5 : <html lang="en">
6 : <head>
7 :
8 : {% block meta %}
9 : <meta http-equiv="X-UA-Compatible" content="ie=edge">
10 : <meta charset="utf-8">
Traceback (most recent call last):
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/workspace/hunt-interiors/home/views.py", line 18, in index
return render(request, 'home/index.html', context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 170, in render
return self._render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
return self.nodelist.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 938, in render
bit = node.render_annotated(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
return self.nodelist.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 938, in render
bit = node.render_annotated(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 938, in render
bit = node.render_annotated(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/defaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/defaulttags.py", line 312, in render
return nodelist.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 938, in render
bit = node.render_annotated(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/defaulttags.py", line 312, in render
return nodelist.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 938, in render
bit = node.render_annotated(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
return self.render(context)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/template/defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/urls/base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/workspace/.pip-modules/lib/python3.8/site-packages/django/urls/resolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /
Exception Value: Reverse for 'sub_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['(?P<subc_id>[0-9] )/$']
Ответ №1:
я думаю, что вы допустили одну ошибку с опечаткой, поэтому идентификатор не может быть получен по шаблону URL
from:
<a href="{% url 'sub_detail' subc.id %}">
^
to:
<a href="{% url 'sub_detail' sub.id %}">
Комментарии:
1. Я был полностью уверен, что идентификатор исходит из представлений, я изменил на sub.id и это работает, приветствия.
Ответ №2:
Вы должны использовать sub.id
вместо subc.id
Также лучше использовать app_name в вашем urls.py файл, а затем использую ваш URL-адрес, ссылаясь на имя приложения.
Например, имя вашего приложения «sub», тогда вы можете ссылаться на свой вид как href="{% url 'sub:sub_detail' sub.id %}"
. Это гарантировало бы отсутствие смешивания, если у вас есть два одинаковых URL-адреса с одинаковыми именами (очевидно, в разных приложениях).