Django点击后页面未找到
我有一个简单的菜单列表
{% 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>