环境:python3.10+django3.2.13
问题描述:
http://localhost:8001/login/
本地登录页正常,登录后跳转到index.html出错。
1、index.html引用的base.html相关部分:(index.html代码已经在下面的回复中做了补充)
<div class="panel-body">
{% archives as date_list %}
<ul>
{% for date in date_list %}
<li>
<a href="{% url 'blog:archives' date.year date.month %}">
{{ date.year }} 年 {{ date.month }}月</a>
</li>
{% empty %}
暂无归档!
{% endfor %}
</ul>
</div>
2、views.py中的
def archives(request, year, month):
blog_list = models.Blog.objects.filter(created_time__year=year, created_time__month=month).order_by('-created_time')
return render(request, 'blog/index.html', context={'blog_list':blog_list})
3、blog\url.py中的patterns设置:
from django.urls import path,re_path
from . import views
app_name = 'blog'
urlpatterns = [
path('',views.indexview.as_view(),name='index'),
path('myindex/<int:loguserid>/',views.myindex.as_view(),name='myindex'),
path('authorindex/<int:id>/',views.authorindex.as_view(),name='authorindex'),
re_path('blog/(?P<pk>[0-9]+)/',views.blogdetailview.as_view(),name='detail'),
re_path('archives/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/', views.archives, name='archives'),
re_path('category/(?P<pk>[0-9]+)/', views.categoryview.as_view(), name='category'),
re_path('tag/(?P<pk>[0-9]+)/', views.tagview.as_view(), name='tag'),
path('search/', views.search, name='search'),
path('login/', views.login,name='login'),
path('registe/', views.registe,name='registe'),
path('logout/',views.logout,name='logout'),
path('test_ckeditor_front/',views.test_ckeditor_front),
]
NoReverseMatch at /
Reverse for 'archives' with arguments '('', '')' not found. 1 pattern(s) tried: ['archives/(?P[0-9]{4})/(?P[0-9]{1,2})/']
Request Method: GET
Request URL: http://localhost:8001/
Django Version: 3.2.13
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'archives' with arguments '('', '')' not found. 1 pattern(s) tried: ['archives/(?P[0-9]{4})/(?P[0-9]{1,2})/']
Exception Location: D:\mysite\gtu\lib\site-packages\django\urls\resolvers.py, line 698, in _reverse_with_prefix
Python Executable: D:\mysite\gtu\Scripts\python.exe
Python Version: 3.10.4
Python Path:
['D:\mysite\gtu_blog',
'D:\Program Files\Python310\python310.zip',
'D:\Program Files\Python310\DLLs',
'D:\Program Files\Python310\lib',
'D:\Program Files\Python310',
'D:\mysite\gtu',
'D:\mysite\gtu\lib\site-packages']
Server time: Wed, 27 Apr 2022 21:44:37 +0800
Error during template rendering
In template D:\mysite\gtu_blog\templates\base.html, error at line 140
Reverse for 'archives' with arguments '('', '')' not found. 1 pattern(s) tried: ['archives/(?P[0-9]{4})/(?P[0-9]{1,2})/']
130 </div>
131 </div>
132 </div>
133 <div class="panel panel-default">
134 <div class="panel-heading">归档</div>
135 <div class="panel-body">
136 {% archives as date_list %}
137 <ul>
138 {% for date in date_list %}
139 <li>
140 <a href="{% url 'blog:archives' date.year date.month %}">
141 {{ date.year }} 年 {{ date.month }}月</a>
142 </li>
143 {% empty %}
144 暂无归档!
145 {% endfor %}
146 </ul>
147 </div>
148 </div>
149
150 {% endblock toc %}
Traceback Switch to copy-and-paste view
D:\mysite\gtu\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
response = get_response(request) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\core\handlers\base.py, line 204, in _get_response
response = response.render() …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\response.py, line 105, in render
self.content = self.rendered_content …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\response.py, line 83, in rendered_content
return template.render(context, self._request) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\backends\django.py, line 61, in render
return self.template.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 170, in render
return self._render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 162, in _render
return self.nodelist.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 938, in render
bit = node.render_annotated(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 905, in render_annotated
return self.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\loader_tags.py, line 150, in render
return compiled_parent._render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 162, in _render
return self.nodelist.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 938, in render
bit = node.render_annotated(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 905, in render_annotated
return self.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\loader_tags.py, line 62, in render
result = block.nodelist.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 938, in render
bit = node.render_annotated(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 905, in render_annotated
return self.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\defaulttags.py, line 214, in render
nodelist.append(node.render_annotated(context)) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\base.py, line 905, in render_annotated
return self.render(context) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\template\defaulttags.py, line 449, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\urls\base.py, line 86, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs) …
▶ Local vars
D:\mysite\gtu\lib\site-packages\django\urls\resolvers.py, line 698, in _reverse_with_prefix
raise NoReverseMatch(msg) …
▶ Local vars
1、检查index.html及base.html;
2、检查archives函数;
3、检查urls.py设置;
正常出现博客首页。
index.html代码:
{% extends 'base.html' %}
{% block main %}
{% if error_msg %}
<p>{{ error_msg }}</p>
{% endif %}
{% for blog in blog_list %}
<div class="media">
<div class="media-left">
<a href="{% url 'blog:authorindex' blog.author.id %}">
<img class="media-object" src="/media/{{ blog.author.head_img }}" style="width:100px;height:100px;"
alt="点击头像显示此作者的博客文章列表">
</a>
</div>
<div class="media-body">
<h3 class="media-heading"><a href="{{ blog.get_absolute_url }}">{{ blog.title }}</a></h3>
<p>{{ blog.excerpt|safe }}...</p>
<div class="entry-meta">
<span class="blog-category"><a href="#">{{ blog.category.name }}</a></span>
<span class="blog-date"><a href="#"><time class="entry-date"
datetime="{{ blog.created_time }}">{{ blog.created_time }}</time></a></span>
<span class="blog-author"><a href="#">{{ blog.author.nikename }}</a></span>
<span class="comments-link"><a href="#">{{ blog.comment_set.count }} 评论</a></span>
<span class="views-count"><a href="#">{{ blog.views }} 阅读</a></span>
</div>
</div>
{% empty %}
<div class="no-post">暂时还没有发布的文章!</div>
{% endfor %}
<!-- 简单分页效果
<div class="pagination-simple">
<a href="#">上一页</a>
<span class="current">第 6 页 / 共 11 页</span>
<a href="#">下一页</a>
</div>
-->
{% if is_paginated %}
<nav aria-label="Page navigation">
<ul class="pagination">
{% if left %}
<li>
<a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% endif %}
{% for i in left %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endfor %}
<li class="active"><a href="?page={{ page_obj.number }}">{{ page_obj.number }} <span class="sr-only">(current)</span></a>
</li>
{% for i in right %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endfor %}
{% if right %}
<li>
<a href="?page={{ page_obj.next_page_number }}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
{% endblock main %}
代码不完整
a标签
报错提示说,让你把这里的代码换一下试试看
re_path('archives/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/', views.archives, name='archives')
更换为
re_path('archives/(?P[0-9]{4})/(?P[0-9]{1,2})/', views.archives, name='archives')
试一下效果如何
{% archives as date_list %} archives这个变量没看到视图函数里传入啊,另外url配置repath建议这样,尾部加上$,首部加上^,避免歧义,
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),,
如果引用的base.html,里面需要变量,那所有引用该模板的视图函数都需要传入该变量,我认为主要是模板渲染变量问题