#django #django-models #django-views #django-templates
Вопрос:
Я создаю приложение Django. Моя конечная цель состоит в том, чтобы пользователь мог щелкнуть ссылку для перенаправления на внешний сайт. Вот мой код:
models.py
class Entry(models.Model):
manufacturer = models.CharField(max_length=255)
source_url = models.URLField(blank=True)
views.py
def purchase(request, entry_id):
entry = get_object_or_404(Entry, pk=entry_id)
return redirect(entry.source_url)
entry.html
{% if user.is_authenticated %}
<a href="{% url 'purchase' %}">Purchase!</a>
{% endif %}
urls.py
urlpatterns = [
path('', views.index, name='index'),
path('entries/<int:entry_id>', views.entry, name='entry'),
]
Данные в базе данных выглядят следующим образом:
id manufacturer source_url
1 Mercedes https://www.mbusa.com/en/home
2 BMW https://www.bmw.com/en/index.html
3 Audi https://www.audiusa.com/us/web/en.html
Сообщение об ошибке, которое я получаю, выглядит так:
Exception Value:
Reverse for 'purchase' not found. 'purchase' is not a valid view function or pattern name.
В качестве теста я изменил следующую строку кода:
От: <a href="{% url 'purchase' %}">Go to Source!</a>
Для: <a href="www.google.com">Go to Source!</a>
Это устранило ошибку «обратного», но созданный ею URL-адрес был:
http://127.0.0.1:8000/entries/www.google.com
Является ли «обратная» ошибка вызвана отсутствием URL-адреса для «покупки» в urls.py
? Если да, то как бы я это определил?
Заранее спасибо за помощь этому новичку в Джанго!
Ответ №1:
Для перенаправления из поля зрения вы можете сделать:
from django.http import HttpResponseRedirect
def purchase(request, entry_id):
entry = get_object_or_404(Entry, pk=entry_id)
return HttpResponseRedirect(entry.source_url)
и вы можете решить <a href="www.google.com">Go to Source!</a>
проблему с помощью:
<a href="http://www.google.com">Go to Source!</a>
entry.html
{% if user.is_authenticated %}
<a href="{% url 'purchase' entry_id %}">Purchase!</a>
{% endif %}
здесь entry_id
будет основной ключ вашей таблицы ввода.
urls.py
urlpatterns = [
path('', views.index, name='index'),
path('entries/<int:entry_id>', views.entry, name='entry'),
path('purchase/<int:entry_id>', views.purchase, name='purchase'),
]
Комментарии:
1. Джафур, спасибо тебе за предложение. К сожалению, я вижу то же самое сообщение об ошибке:
Reverse for 'purchase' not found. 'purchase' is not a valid view function or pattern name.
2. @невозмутимость вы проверили, что ваш
source_url
файл содержитhttp
илиhttps
в начале? Это работает на меня для вышеупомянутого решения.3. Значения
source_url
полей содержатhttps
. Например:https://unagiscooters.com/products/the-scooter/
4. разве вы не создали ничего
url
дляpurchase
функции?5. Вы имеете в виду, что мне нужно создать
url
дляpurchase()
функции вurls.py
файле?