Динамическое перенаправление в django

#python #django #redirect #dynamic #response.redirect

#python #django #перенаправление #динамический #ответ.перенаправление

Вопрос:

Я пытаюсь динамически перенаправлять с одной динамической страницы на другую. Подумайте о том, чтобы перейти на страницу фильма IMDB (динамическую), а затем перейти по ссылке на страницу сценариста / режиссера / актера (динамическую).

Это URL-адреса:

    urlpatterns = [
    path('', views.index, name="index"),
    path('writer/<int:id>', views.writer, name="writer"),
    path('title/<int:id>', views.title, name="title"),
    path('creator/', views.creator, name="creator"),
]
 

Это index.html:

 {% for pilots in pilot %}
    <div>
        <p>Title: <a href="title/{{ pilots.id }}">{{ pilots.title }}</a></p>
        {% for writers in pilots.creators.all %}
            <p>Writer: <a href="writer/{{ writers.id }}">{{ writers.writer }}</a></p>
        {% endfor %}
        
    </div>
{% endfor %}
 

Это title.html (который динамический ahref не работает):

 {% for title in titles %}
        <p>{{title.title}}</p>
        <p>{{title.count}}</p>
        <p>{{title.year}}</p>
        <p>{{title.description}}</p>
        {% for creators in title.creators.all %}
            <a href="creator/">{{creators.writer}}</a>
        {% endfor %}
{% endfor %}
 

И это views.py:

 def title(request, id):
    titles = Pilot.objects.filter(id=id)
    context = {
        'titles': titles,
    }
    return render(request, 'title.html', context)

def creator(request):
    return redirect(f'writer/{id}')
 

Ответ №1:

Я думаю, это то, что вам нужно: удалить жесткий код в django

ваш код может быть изменен на

 {% for title in titles %}
        <p>{{title.title}}</p>
        <p>{{title.count}}</p>
        <p>{{title.year}}</p>
        <p>{{title.description}}</p>
        {% for creators in title.creators.all %}
            <a href="{% url 'writer' creators.writer.id %}">{{creators.writer}}</a>
        {% endfor %}
{% endfor %}
 

и более того, вы создаете namespace (при использовании нескольких приложений). подробнее см. В документе. 🙂

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

1. Я попробовал то, что вы рекомендовали, но у меня другая ошибка: обратный для ‘name’ с аргументами ‘(«,)’ не найден. попробовано 1 шаблон (ы): [‘name/(?P<id>[0-9] )$’] @ tomy0608

2. проверьте, зарегистрировали ли вы приложение. в нем указано> Обратное для ‘name’ с аргументами ‘(«,)’ не найдено.. попробовано 1 шаблон (ы): [‘name/(?P<id>[0-9] ) $’] возможно, вы зарегистрировали name/(?P<id>[0-9] )$ в нем приложение.

3. Вы правы. Я не хотел делать это более запутанным, но я изменил имя пути с «Writer» на «Name» для большей ясности с моей стороны через urls.py/views.py . Итак, если бы путь по-прежнему назывался «writer», я бы получил ту же ошибку. Мне интересно, имеет ли это какое-то отношение к резервному поиску. Может быть, я это выдумываю

4. @T_hall будьте осторожны с именем разрешения, именем модуля или тем, что вы используете. постарайтесь не перепутать их. лучшей практикой является использование пространства имен . и абсолютный импорт является плюсом.

5. Спасибо за вашу помощь! Еще один вопрос. get_absolute_url работает до тех пор, пока я не попытаюсь использовать его в цикле for в цикле for. Когда я нажимаю на ссылку для страницы с идентификатором автора, она загружает идентификатор заголовка, в основном перезагружая ту же страницу, на которой я нахожусь