如何解决网页渲染中可能存在冲突的url

问题描述 投票:0回答:1

当我尝试加载一个页面时,我得到另一个页面...... 我尝试加载一个名为 wikiPage 的页面,如下面的 url 描述中所示,但我得到另一个链接到名为 newPageb 的视图的 url 模式,尽管这两个 url 具有相同的参数,并且按顺序调用第一个 url,但是我如何使它们与众不同,无论顺序如何,我都可以调用它们。

这是我的 urls.py...

app_name= "encyclopedia"
urlpatterns = [
    path("", views.index, name="index"),
    path("randomPage", views.randomPage, name="randomPage"),
    path("<str:pagetitle>", views.newPageb, name="newPageb"),
    path("<str:pagetitle>", views.wikiPage, name="wikiPage"),
    path("<str:z>", views.wikiPage, name="wikiPage"),
    path("newPage", views.newPage, name="newPage"),
    path("<str:pageSearch>", views.search, name="search"),
    path("", views.search, name="search")
Here are the conflicting views..
def newPageb(request, pagetitle)
...
...
def wikiPage(request, pagetitle):
...
...

这是声明 pagetitle 参数的模板

{% extends "encyclopedia/layout.html" %}
"

{% block title %}
    Encyclopedia
{% endblock %}

{% block body %}
    <h1> {{title}} </h1>
    <ul>
        {% for pagetitle in entries %}
        <li>
           <a href="{% url 'encyclopedia:wikiPage' pagetitle=pagetitle%}"> {{ pagetitle }} </a>
        </li>
          {{entrie|safe}}
        {% endfor %}
    </ul>

{% endblock %}
python django templates rendering url-pattern
1个回答
0
投票

因为你有两条匹配的路由,因此django会为url地址选择第一个合适的模板,而不会查看后面的地址。

path("<str:pagetitle>", views.newPageb, name="newPageb"),    
path("<str:pagetitle>", views.wikiPage, name="wikiPage")

要解决此问题,您需要更改其中一个地址。例子

path("new-page/<str:pagetitle>", views.newPageb, name="newPageb"),    
path("<str:pagetitle>", views.wikiPage, name="wikiPage")
© www.soinside.com 2019 - 2024. All rights reserved.