You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Django视图与URL以处理二级资源链接及任意引荐请求?

正确配置方案

1. 兜底URL的正确写法

必须把兜底URL放在所有具体URL的最后,因为Django是按顺序匹配URL的,前面的规则优先级更高。如果用path的path转换器没生效,可以改用re_path(原url函数)配合正则表达式,能覆盖所有未匹配的请求:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('home/', views.home),
    # 兜底规则,放在最后
    re_path(r'^(?P<referral>.*)$', views.any_referral),
]

这里的正则^(?P<referral>.*)$会匹配所有未被前面规则命中的请求,包括带斜杠、不带斜杠的各种路径。

2. 视图实现逻辑

视图需要接收referral参数,同时可以通过request.META.get('HTTP_REFERER')获取请求的引荐来源页面,以此实现资源引荐的处理逻辑:

from django.shortcuts import HttpResponse

def any_referral(request, referral):
    # 获取引荐来源(即发起请求的页面地址)
    referer = request.META.get('HTTP_REFERER', '')
    # 这里添加你的业务逻辑,比如日志记录、返回指定资源等
    # 示例:返回请求路径和引荐来源信息
    return HttpResponse(f"请求路径: {referral}, 引荐来源: {referer}")

3. 静态资源请求的特殊处理

注意:Django默认会通过django.contrib.staticfiles中间件处理/static/开头的请求(比如你模板里的{% static 'images/favicon-32x32.png' %}),这类请求不会进入你的兜底视图。

如果需要接管静态资源的引荐请求,可按以下方式调整:

  • 要么移除INSTALLED_APPS中的django.contrib.staticfiles
  • 要么给静态资源单独配置路由,指向你的自定义视图:
urlpatterns = [
    path('home/', views.home),
    # 先接管静态资源路径
    re_path(r'^static/(?P<referral>.*)$', views.any_referral),
    # 再兜底其他所有路径
    re_path(r'^(?P<referral>.*)$', views.any_referral),
]

4. 原配置失效的排查点

你之前用path('<path:referral>', any_referral)没触发,大概率是这几个原因:

  • 该规则没放在所有URL的最后,被前面的规则拦截了
  • 请求路径是根路径/,而path('<path:referral>')要求referral非空,无法匹配根路径;若要覆盖根路径,需额外添加path('', views.any_referral)
  • 静态资源请求被Django的静态文件中间件接管,没进入自定义视图

内容的提问来源于stack exchange,提问作者Dimon Agon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:17:14