Django框架访问store.html报URL不匹配,不修改HTML如何解决?
解决方案
方案1:直接新增匹配store.html的路由规则
无需修改现有前端代码,直接在主项目的urls.py中新增一行路由配置,将store.html的请求直接映射到对应的store视图即可:
# greatkart/urls.py from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static # 导入对应视图 from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.home, name='home'), # 新增匹配store.html的规则 path('store.html', views.store, name='store_html'), path('store/', include("store.urls")) ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
该方案不会改变浏览器地址栏的显示,用户访问的始终是store.html路径,和现有前端逻辑完全兼容。
方案2:配置重定向规则跳转到标准store路径
如果希望后续地址统一使用/store/的规范路径,避免后续出现重复拼接的问题,可以配置永久重定向规则,将store.html的请求自动跳转至标准的/store/路由:
# greatkart/urls.py from django.contrib import admin from django.urls import path, include from django.views.generic.base import RedirectView from django.conf import settings from django.conf.urls.static import static from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.home, name='home'), # 新增重定向规则,permanent=True表示返回301永久重定向 path('store.html', RedirectView.as_view(pattern_name='store', permanent=True)), path('store/', include("store.urls")) ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
配置后用户点击按钮会自动跳转至/store/路径,地址栏会显示规范路由,即使后续多次点击也不会出现路径重复拼接的问题。
补充说明:之前修改HTML出现重复拼接的原因是使用了相对路径./store,如果当前页面地址已经是/store/的情况下,相对路径会在当前路径后拼接,就会出现/store/store/的错误。如果之后需要修改HTML,推荐使用Django模板的url标签生成绝对路径:<a href="{% url 'store' %}" class="btn btn-outline-primary float-right">See all</a>,可以从根本上避免路径拼接错误。
内容的提问来源于stack exchange,提问作者Marcus Aurelius
相关产品推荐
相关产品推荐

