#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. работает ли это, если вы поставите пробел перед
%
incontato.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. работает ли это, если вы поставите пробел перед
%
incontato.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. работает ли это, если вы поставите пробел перед
%
incontato.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.