«Реверс для «страницы» без аргументов не найден. 1 шаблон(ы) «попробовал» в Django

#python #python-3.x #django

#питон #python-3.x #джанго

Вопрос:

Я недавно начал тестировать и изучать Django и создаю несколько проектов, чтобы изучить и протестировать его. Я попытался найти ответы в документации, но не смог их найти, если вы можете прислать мне ссылку на документацию, чтобы решить эту проблему с помощью вашего решения/подсказки, я был бы признателен.

Я пытаюсь передать аргумент через URL в Django, URL меняется, и int появляется в браузере при перенаправлении (т. Е. http://127.0.0.1:8000/edit-contact/1 — 1 динамически выводится из «перенаправления»), но, по-видимому, функция просмотра не может его распознать.

кнопка, которую я использую для перенаправления и отправки аргумента

 lt;a href="{% url 'edit-contact' contato.id%}" class="btn btn-primary"gt;  Edit contact lt;/agt;   

urls.py файл:

 urlpatterns = [  path('', views.index, name='index'),  path('busca/', views.search, name='busca'),  path('lt;int:contato_idgt;', views.details, name='detalhes'),  path('edit-contact/lt;int:contato_idgt;',  views.edit_contact, name='edit-contact'),  ]  

функция просмотра, которую я использую для захвата запроса

 @login_required(redirect_field_name='login') def edit_contact(request, contato_id):  if request.method != 'POST':  form = ContatoForm()   return render(request, 'contatos/detalhes.html', {'form': form, 'contato_id': contato_id})  

Обратная связь:

 Environment:   Request Method: GET Request URL: http://127.0.0.1:8000/edit-contact/1  Django Version: 3.2.9 Python Version: 3.10.0 Installed Applications: ['django.contrib.admin',  'django.contrib.auth',  'django.contrib.contenttypes',  'django.contrib.sessions',  'django.contrib.messages',  'django.contrib.staticfiles',  'contatos.apps.ContatosConfig',  'accounts.apps.AccountsConfig'] 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 D:GabrielCodandostudyingdjango_learningDjangoProj_agendatemplatesbase.html, error at line 0  Reverse for 'edit-contact' with no arguments not found. 1 pattern(s) tried: ['edit\-contact/(?Plt;contato_idgt;[0-9] )


Комментарии:

1. работает ли это, если вы поставите пробел перед % in contato.id%} (в шаблоне)?

2. Это была моя первая попытка, она не сработала

3. Проблема в вашем шаблоне. Похоже, что contato.id это не имеет никакого значения. Вот почему django не находит шаблон URL для edit-contact без целого числа. Обязательно укажите значение при создании URL-адреса для редактирования контактов.

4. Но когда он перенаправляется, URL-адрес получает целое число, как в 127.0.0.1:8000/edit-contact/1 , я не вставил туда 1, оно получено из шаблона. Это мое сомнение, целое число распознается, но не функцией

5. Вы передаете его в contato_id шаблон. Но в шаблоне, с помощью которого вы пытаетесь получить доступ contato.id .

Ответ №1:

Ну, я действительно не могу сказать, является ли это решением или просто обходным путем, но я кое-что сделал, и теперь, по-видимому, это работает. По крайней мере, я больше не получаю сообщение об ошибке. Вот что я сделал.

Я добавил URL-шаблон для тех случаев, когда у edit-contact не было аргумента, потому что об этом говорит ошибка, или, по крайней мере, это то, что я понял из нее.

  urlpatterns = [  path('', views.index, name='index'),  path('busca/', views.search, name='busca'),  path('lt;int:contato_idgt;', views.details, name='detalhes'),  path('edit-contact/', views.edit_contact, name='edit-contact'),  path('edit-contact/lt;int:contact_idgt;',  views.edit_contact, name='edit-contact'), ]   

Я придумал это решение после того, как прочитал много постов здесь, в SO, прочитал документы для Django и подумал в одиночестве. Если кто-то думает, что я ошибаюсь или у меня есть лучшее решение, я открыт для предложений, в конце концов, я только начал изучать Django.

] 1 : {% load static%} 2 : 3 : lt;!DOCTYPE htmlgt; 4 : lt;html lang="pt"gt; 5 : lt;headgt; 6 : {% include 'partials/_head.html' %} 7 : 8 : lt;titlegt;{% block 'title' %}{% endblock %}lt;/titlegt; 9 : lt;/headgt; 10 : Traceback (most recent call last): File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangocorehandlersexception.py", line 47, in inner response = get_response(request) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangocorehandlersbase.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangocontribauthdecorators.py", line 21, in _wrapped_view return view_func(request, *args, **kwargs) File "D:gabrielcodandostudyingdjango_learningDjangoProj_agendacontatosviews.py", line 76, in edit_contact return render(request, 'contatos/detalhes.html', {'form': form, 'contato_id': contato_id}) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangoshortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplateloader.py", line 62, in render_to_string return template.render(context, request) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebackendsdjango.py", line 61, in render return self.template.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 170, in render return self._render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 162, in _render return self.nodelist.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 938, in render bit = node.render_annotated(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 905, in render_annotated return self.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplateloader_tags.py", line 150, in render return compiled_parent._render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 162, in _render return self.nodelist.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 938, in render bit = node.render_annotated(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 905, in render_annotated return self.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplateloader_tags.py", line 62, in render result = block.nodelist.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 938, in render bit = node.render_annotated(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 905, in render_annotated return self.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatedefaulttags.py", line 312, in render return nodelist.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 938, in render bit = node.render_annotated(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 905, in render_annotated return self.render(context) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatedefaulttags.py", line 446, in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangourlsbase.py", line 86, in reverse return resolver._reverse_with_prefix(view, prefix, *args, **kwargs) File "C:UsersCARVALHOAppDataLocalProgramsPythonPython310libsite-packagesdjangourlsresolvers.py", line 694, in _reverse_with_prefix raise NoReverseMatch(msg) Exception Type: NoReverseMatch at /edit-contact/1 Exception Value: Reverse for 'edit-contact' with no arguments not found. 1 pattern(s) tried: ['edit\-contact/(?Plt;contato_idgt;[0-9] )

Комментарии:

1. работает ли это, если вы поставите пробел перед % in contato.id%} (в шаблоне)?

2. Это была моя первая попытка, она не сработала

3. Проблема в вашем шаблоне. Похоже, что contato.id это не имеет никакого значения. Вот почему django не находит шаблон URL для edit-contact без целого числа. Обязательно укажите значение при создании URL-адреса для редактирования контактов.

4. Но когда он перенаправляется, URL-адрес получает целое число, как в 127.0.0.1:8000/edit-contact/1 , я не вставил туда 1, оно получено из шаблона. Это мое сомнение, целое число распознается, но не функцией

5. Вы передаете его в contato_id шаблон. Но в шаблоне, с помощью которого вы пытаетесь получить доступ contato.id .

Ответ №1:

Ну, я действительно не могу сказать, является ли это решением или просто обходным путем, но я кое-что сделал, и теперь, по-видимому, это работает. По крайней мере, я больше не получаю сообщение об ошибке. Вот что я сделал.

Я добавил URL-шаблон для тех случаев, когда у edit-contact не было аргумента, потому что об этом говорит ошибка, или, по крайней мере, это то, что я понял из нее.


Я придумал это решение после того, как прочитал много постов здесь, в SO, прочитал документы для Django и подумал в одиночестве. Если кто-то думает, что я ошибаюсь или у меня есть лучшее решение, я открыт для предложений, в конце концов, я только начал изучать Django.

]

Комментарии:

1. работает ли это, если вы поставите пробел перед % in contato.id%} (в шаблоне)?

2. Это была моя первая попытка, она не сработала

3. Проблема в вашем шаблоне. Похоже, что contato.id это не имеет никакого значения. Вот почему django не находит шаблон URL для edit-contact без целого числа. Обязательно укажите значение при создании URL-адреса для редактирования контактов.

4. Но когда он перенаправляется, URL-адрес получает целое число, как в 127.0.0.1:8000/edit-contact/1 , я не вставил туда 1, оно получено из шаблона. Это мое сомнение, целое число распознается, но не функцией

5. Вы передаете его в contato_id шаблон. Но в шаблоне, с помощью которого вы пытаетесь получить доступ contato.id .

Ответ №1:

Ну, я действительно не могу сказать, является ли это решением или просто обходным путем, но я кое-что сделал, и теперь, по-видимому, это работает. По крайней мере, я больше не получаю сообщение об ошибке. Вот что я сделал.

Я добавил URL-шаблон для тех случаев, когда у edit-contact не было аргумента, потому что об этом говорит ошибка, или, по крайней мере, это то, что я понял из нее.


Я придумал это решение после того, как прочитал много постов здесь, в SO, прочитал документы для Django и подумал в одиночестве. Если кто-то думает, что я ошибаюсь или у меня есть лучшее решение, я открыт для предложений, в конце концов, я только начал изучать Django.