【问题标题】:Django "remove hardcoded urls in templates" not workingDjango“删除模板中的硬编码网址”不起作用
【发布时间】:2014-10-22 16:51:02
【问题描述】:

我是第一次按照教程https://docs.djangoproject.com/en/1.6/intro/tutorial03/查看django

到目前为止,一切都很顺利。我在删除硬编码网址部分遇到了麻烦。我正在使用 Django 1.6.6。

当我从以下位置更改硬编码网址时:

<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>

到:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

我收到如下 404 错误:

Page not found (404)
Request Method:     GET
Request URL:    http://localhost:8000/polls/%7B%%20url%20'detail'%20poll.id%20%7D

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

^polls/ ^$ [name='index']
^polls/ ^(?P<poll_id>\d+)/$ [name='detail']
^polls/ ^(?P<poll_id>\d+)/results/$ [name='results']
^polls/ ^(?P<poll_id>\d+)/vote/$ [name='vote']
^admin/

The current URL, polls/{% url 'detail' poll.id }, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file.  Change that to False, and Django will display a standard 404 page.

地址栏中显示的网址是

mylocalenv/polls/%7B%%20url%20%27detail%27%20poll.id%20%7D

我尝试从“详细信息”中删除引号,但鉴于我使用的是 django 1.6.6,我不需要这样做。它也没有用。我也尝试过跳过一点,在 urls.py 中包含 /polls/ 命名空间,但同样没有乐趣。

我的 urls.py 文件如下所示:

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'), 

)

我的 index.html 模板中的确切代码是:

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

知道了

但令人沮丧的是,我不知道为什么。出于对 index.html 的绝望,我开始在这一行玩弄 index.html 文件:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

出于逻辑原因,我将 poll.id 更改为 poll_id。正如我所料,重新加载破坏了 index.html。当我将其改回 poll.id 时,一切正常。这是没有意义的。我什至 ctrl^z 回到以前不起作用的 index.html,现在它也起作用了。我在每次检查之前都重新启动了服务器。我很烦。但至少它是有效的。

【问题讨论】:

  • 看起来这不是您模板中的确切代码。你能复制粘贴确切的代码吗?
  • 模板的其余部分真的有效吗?似乎它实际上并没有被解析,所以你在链接中得到了原始模板标签。
  • 是的,我也是这么想的,但是在我将链接切换到 {% url %} 标签之前它工作正常。我错过了导入还是什么?
  • 我刚刚遇到了一个类似的问题,但在教程的后面。索引页面突然停止工作,就像你描述的那样它以前很好,我没有碰过它。重新启动服务器修复它。一定是服务器出了点问题。

标签: python django django-templates django-urls


【解决方案1】:

回溯中的这一行表明您错过了右花括号之前的%

The current URL, polls/{% url 'detail' poll.id }, didn't match any of these.

【讨论】:

  • 是的,这就是建议。麻烦的是,我没有! :) 我也尝试删除文件并重新制作它只是为了看看是否发生了奇怪的事情。并重命名它并将我的 polls.urls 从 index 更改为 index1。仍然得到相同的错误和丢失的 %
  • 我认为 poll.id 设置为 "{% url 'detail' poll.id }" 的可能性更大,因为它将 url 模板标签识别为有效。由于这是一个字符串并且 poll_id 需要是一个数字,所以它失败了。如果是因为你在右花括号之前缺少 %,那么它会在模板中引发语法错误。
  • @schillingt 如果poll.id 不是数字,那么我想你会得到NoReverseMatch。无论如何,这并不重要,这个问题已经存在一年了,所以 OP 希望已经解决了他们的问题。
【解决方案2】:

即使,我也遇到了这个问题,对我来说,原因是我在 { %% } 之间留出了空格,其中正确的语法是 {%%}。为了完整起见,我在下面给出了正确和不正确的语法 -

正确的语法 - &lt;li&gt;&lt;a href="{% url 'detail' poll.id %}"&gt;{{ poll.question }}&lt;/a&gt;&lt;/li&gt;

语法不正确 - &lt;li&gt;&lt;a href="{ % url 'detail' poll.id % }"&gt;{{ poll.question }}&lt;/a&gt;&lt;/li&gt;

【讨论】:

    【解决方案3】:

    检查你的 polls/urls.py 文件,确保你的 urlpatterns 是 [],而不是 {}

    urlpatterns = [
        path('', views.index, name='index'),
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-09
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多