Django中如何根据锚点标签配置对应动态URL跳转
实现方案
总共调整3处代码即可,核心是给列表页路由加动态路径参数,模板跳转时传入对应平台值:
- 调整
urls.py路由规则
原有的listingpage路由没有匹配动态路径段,增加命名正则分组捕获平台名,传给对应视图:app_name='listing' from django.conf.urls import url from . import views urlpatterns = [ url(r'^listing/select/$', views.platformselect, name='listingselect'), # 捕获listing/后的平台名字符串,参数名固定为platform_name传给视图 url(r'^listing/(?P<platform_name>[\w-]+)/$', views.listingpage, name='listingpage'), ] - 调整
views.py的视图函数
给listingpage视图增加形参接收路由传过来的平台名,可按需加平台合法性校验:from django.http import Http404 def platformselect(request): return render(request,'listing/platform_select.html') # 形参名必须和路由里的分组名完全一致 def listingpage(request, platform_name): # 可选:校验平台是否合法,非法请求直接返回404 if platform_name not in ['amazon', 'ebay', 'google']: raise Http404("对应平台页面不存在") # 后续可根据platform_name的值加载对应平台的业务数据,再传给模板渲染 return render(request, 'listing/listingpage.html', {'platform': platform_name}) - 调整平台选择页模板的跳转链接
注意你代码里视图返回的模板路径是listing/platform_select.html,和你写的platform_selection.html文件名不一致,以你实际项目里的模板文件名为准,模板内的a标签跳转时传入对应平台参数即可:<a href="{% url 'listing:listingpage' platform_name='amazon' %}">amazon</a> <a href="{% url 'listing:listingpage' platform_name='ebay' %}">ebay</a> <a href="{% url 'listing:listingpage' platform_name='google' %}">google</a>
改完之后,点击对应平台链接就会跳转到/listing/amazon、/listing/ebay、/listing/google这类地址,视图里也能拿到当前访问的平台标识做后续逻辑处理。如果不需要url末尾的斜杠,把路由正则最后的/$改成$即可,不过Django默认开启APPEND_SLASH配置,保留末尾斜杠可以避免不必要的重定向。
内容的提问来源于stack exchange,提问作者Ahmet Yılmaz
相关产品推荐
相关产品推荐

