【问题标题】:How can I loop through dynamic URLs in Django 4?如何在 Django 4 中遍历动态 URL?
【发布时间】:2022-01-21 18:35:10
【问题描述】:

问题: 我最近在 Python Anywhere 上发布了一个站点,并且不得不经历更改通过我的 SQLite 数据库设置的所有页面 URL 的繁琐过程。由于 root 已从本地端口更改为“username.pythonanywhere.com”,因此所有 URL 都已损坏。

我这样做没有问题,但我意识到为了进行本地开发,我需要将数据库中的 URL back 更改为它们的本地端口路径。这显然是我们使用动态 URL 的原因。但是,硬编码的 URL 是这样的,因为我在呈现的 html 页面上使用 for 循环来循环访问数据库中的那些静态 URL。

我的问题是,如何在 for 循环中使用动态 URL {% url app:template %}?理想情况下,我希望在我的数据库中有一个包含app:template 信息的字段,这样我就可以遍历数据库中的所有项目,并通过从该字段中获取信息来动态链接它们。

我已尝试在 models.py 中创建一个新的 CharField,其字符串值为 {% url app:template %},希望它能与 href="{{ project.href_str}}" 的模板语言一起使用,但这似乎并不去工作。我已经在字段字符串值和模板语言值的各种组合中尝试过这种方法。我还尝试了这种将模板语言用作字符串的方法,方法是在我的views.py return 语句中添加一个字典,不同之处在于调用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 %}

【问题讨论】:

  • 我认为您最好为此使用SlugField。在您的模板中,您可以将变量传递给url 解析器{% url 'app:view' project.href %}。这是你要找的吗?

标签: python django django-models django-urls


【解决方案1】:

回答我自己的问题。我需要做的就是在没有任何模板语言的情况下引用模型字段。

&lt;a href="{% url project.href_str %}" target="_blank"&gt; 其中 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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 2016-07-09
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多