如何解决网页渲染中可能冲突的URL

0 投票
1 回答
24 浏览
提问于 2025-04-12 19:53

当我尝试加载一个页面时,却加载了另一个页面……我想加载一个叫做wikiPage的页面,具体的url在下面的描述中有提到,但我却得到了一个链接到newPageb的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 %}

1 个回答

0

因为你有两个路径匹配,所以Django会选择第一个合适的模板来处理这个网址,而不会继续查看后面的路径。

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")

撰写回答