Django教程进阶:如何将/films页面内容迁移至网站首页?
解决将Django Films页面内容迁移至首页的问题
看起来你已经离目标很近了!问题出在项目根URL配置(mysite.urls.py)没有为首页(根路径/)绑定任何视图,所以访问http://127.0.0.1:8000/时会返回404。下面提供两种符合你需求的解决方案,你可以根据实际情况选择:
方案一:保留原有/films路径,同时让首页显示Films列表
这个方案适合你想同时保留/films路径访问列表,并且让首页也展示相同内容的场景:
- 打开
mysite.urls.py,先导入films应用的views模块:
from films import views
- 在
urlpatterns最顶部添加根路径的配置,将其指向你已经写好的index视图:
urlpatterns = [ url(r'^$', views.index, name='home'), # 根路径匹配空字符串,绑定index视图 url(r'^films/', include('films.urls')), url(r'^admin/', admin.site.urls), ]
这里的r'^$'是正则表达式,匹配空的路径(也就是首页),这样访问根路径时就会调用films.views.index,展示你写好的电影列表。
方案二:将Films应用的所有路径迁移至根路径(原/films路径不再生效)
如果你希望彻底把Films的内容移到根路径,比如首页是列表,/5/对应详情页,可以这样修改:
修改mysite.urls.py,把原来的url(r'^films/', include('films.urls'))替换成:
urlpatterns = [ url(r'^', include('films.urls')), # 根路径开始的所有请求都走films.urls url(r'^admin/', admin.site.urls), ]
这样films.urls.py里的空路径就会对应首页,<int:film_id>/对应/5/这样的详情页。不过要注意,这样原来的/films/路径就无法访问了,所有Films相关的路径都直接在根路径下。
额外注意点
- 如果你使用的是Django 2.0+的
path()语法(更推荐),根路径的配置可以写成path('', views.index, name='home'),不需要正则表达式。 - 你的
index.html模板里的链接/films/{{ film.id }}/在方案一中可以正常使用;如果选择方案二,需要把链接改成/{{ film.id }}/才能正确跳转。
现在重启Django开发服务器,访问首页就能看到电影列表啦!
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

