Как я могу просмотреть динамические URL в Django 4?
Проблема: Недавно я опубликовал сайт на Python Anywhere и мне пришлось пройти через утомительный процесс изменения всех URL страниц, которые я установил через мою базу данных SQLite. Все URL были сломаны, поскольку корень изменился с локального порта на "username.pythonanywhere.com".
У меня не было проблем с этим, но я понял, что для локальной разработки мне нужно будет изменить URL в базе данных обратно на их локальные пути к портам. Очевидно, именно поэтому мы используем динамические URL. Однако URL, которые были жестко закодированы, были такими, потому что я использовал цикл for на отображаемой html-странице для перебора статических URL в моей базе данных.
Мой вопрос заключается в том, как я могу использовать динамические URL {% url app:template %} в цикле for? В идеале, я хотел бы иметь поле в моей базе данных, содержащее информацию app:template, чтобы я мог циклически просматривать все проекты в моей базе данных и динамически связывать их, получая информацию из этого поля
Я пытался создать новое поле CharField в models.py со строковым значением для {% url app:template %}, надеясь, что оно будет работать с языком шаблонов href="{{ project.href_str}}", но, похоже, это не работает. Я пробовал этот метод в различных комбинациях строковых значений полей и значений языка шаблонов. Я также попробовал этот метод использования языка шаблонов в качестве строки, добавив словарь к моему оператору возврата views.py, с разницей в вызове ключей в href="{{ project_urls.appname }}". Здесь тоже ничего не получилось.
Просто для записи, я попробовал динамические URL, которые мне нужны вне циклов, и они прекрасно работают, поэтому я не думаю, что это проблема с самим отображением url.
Вот HTML:
.
В моей базе данных project.href_str имеет значение {% url 'calculator:calculator' %}
{% for project in projects %}
<div class="col-lg-3 col-md-6">
{% if project.href_str %}
<a href="{{ project.href_str }}" target="_blank">
<img src="{{ project.image.url }}" class="img-fluid mb-2" style="">
</a>
{% else %}
<img src="{{ project.image.url }}" class="img-fluid mb-2" width="500" height="500">
{% endif %}
<h3 class="">{{ project.title }}</h3>
<p>{{ project.description }}</p>
</div>
{% endfor %}
Отвечая на свой собственный вопрос. Все, что мне нужно было сделать, это сослаться на поле модели без какого-либо языка шаблонов.
<a href="{% url project.href_str %}" target="_blank">, где project.href_str является CharField, работает совершенно нормально. Моя проблема была в том, что я полагал, что это требует {{}} или чего-то дополнительного.
{% for project in projects %}
<div class="col-lg-3 col-md-6">
{% if project.href %}
<a href="{% url project.href_str %}" target="_blank">
<img src="{{ project.image.url }}" class="img-fluid mb-2" style="">
</a>
{% else %}
<img src="{{ project.image.url }}" class="img-fluid mb-2" width="500" height="500">
{% endif %}
<h3 class="">{{ project.title }}</h3>
<p>{{ project.description }}</p>
</div>
{% endfor %}