Django点击后页面未找到

1 投票
3 回答
3016 浏览
提问于 2025-04-16 10:04

我有一个简单的菜单列表

{% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="{{item}}/">{{ item }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

还有一个列表:

MENU = ['Home','Contact','About']

当我点击“联系”时,会跳转到地址 127.0.0.1:8000/Contact,使用的是同样的模板。但是如果我再次点击“联系”,我就会看到“页面未找到”,地址变成了 127.0.0.1:8000/Contact/Contact

我该怎么解决这个问题呢?

3 个回答

0

使用绝对路径,比如:

MENU = [{'text':'Home',
    'url':'/home'},
    {'text':'Contact',
    'url':'/contact'},
    {'text':'Home',
    'url':'/home'}]

还有这样的代码:

{% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="{{url}}/">{{ text }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

不过更好的解决办法是使用一些现成的内容管理系统(CMS)应用,比如可以从这里找到 django资源页面 上的django-cms ( django-cms.org )。

1

试着把 href="{{item}}" 改成 href="/{{item}}"

(% block menu %} 
    <ul>
    {% for item in list %}
    <li><a href="/{{item}}/">{{ item }}</a></li>
    {% endfor %}
    </ul>
{% endblock %}

你之前用的是相对网址,如果你在不同的网页层级,这样是行不通的。

6

这里的问题是,你生成的HTML代码中有指向“Contact/”的链接。如果你已经在/Contact这个网址上,点击这个链接就会变成/Contact/Contact,就像你看到的那样。

解决这个问题的简单方法是在{{item}}前面加一个/,像这样:

<li><a href="/{{item}}/">{{ item }}</a></li>

不过,django有更好的方法来处理网址,而不是自己去创建它们。你可以看看网址调度器的文档[1],这样你就可以使用url模板标签[2]了。

那行代码最后看起来会像这样:

<li><a href="{% url item %}">{{ item }}</a></li>
  1. [1] http://docs.djangoproject.com/en/dev/topics/http/urls/
  2. [2] http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#url

撰写回答