首页 > 解决方案 > URL中的Django意外字符

问题描述

我正在制作博客并尝试在帖子列表页面上进行分页操作。当我运行我的应用程序时,我的 URL 包含意外字符。例如;

http://127.0.0.1:8000/blog/%5E$

我不明白为什么%5E$会在那里。

这是我的urls.py(这是在 blogapp 中):

from django.urls import path,include
from django.contrib import admin

from . import views

urlpatterns = [
    path(r'^$',views.getPosts,name="bloghome"),
    path(r'^(?P<selected_page>\d+)/?$',views.getPosts,name="bloghome"),    
    path('<slug>',views.postDetailPage,name="post_detail")
]

view.py 中的getPost函数

def getPosts(request,selected_page=1):
#    latest_post = Posts.objects.get(id=1)
    posts = Posts.objects.all().order_by('-pub_date')
    pages = Paginator(posts,5) #Show 5 post per page
    try:
        returned_page = pages.page(selected_page)
    except EmptyPage:
        returned_page = pages.page(pages.num_pages)
    #content = pages.page(selected_page)    
    return render(request,'blog.html',{'page':returned_page,
                                       'posts':returned_page.object_list
                                        })

最后,这个博客列表页面是从带有<a>标签的主页进入的。这是一行代码:

<a href="{% url 'bloghome'%}">Blog</a> 

标签: pythonregexdjangourl

解决方案


基于https://docs.djangoproject.com/en/dev/ref/urls/#django.urls.path ,根据 zvadym 的先前评论,您需要使用re_path()而不是path(),因为它按字面意思解释。^$这是 Django 2.0 中的新功能,因此取决于您的版本。


推荐阅读