[Django] path函数路径映射出错

文章讲述了在Django3.8及以上版本中,使用path函数处理静态资源路径时遇到的问题,特别是以/static/开头的路径会被强制转入后台文件区,需要特殊配置STATIC_URL和STATIC_ROOT以实现正确映射。
摘要由CSDN通过智能技术生成

        结论:Django的path函数的路径存在一部分特殊的字符,诸如/static/xxx/等路径会强制转入后台文件区,而无法对其进行路径影射。

        版本:Python 3.8;Django 4.1.12(2以上版本应该都差不多)

        首先是Django的path函数基本写法(urls.py):

from django.urls import path
from ... import views

urlpatterns = [
    # 固定url
    path('articles/2003/', views.xxx),
    # 单参数传入
    path('articles/<int:year>/', views.xxx),
    # 多参数传入
    path('articles/<int:year>/<str:title>/', views.xxx),
]

        然后是视图里的处理函数:

from django.shortcuts import render, redirect, ...

def some_view(request, year, title):
    date = year
    name = title
    ...
    return render(request, ...)

        按以上思路去写多半不会出错,但是问题在于,我将nodejs生成的静态资源(node_modules这些文件)用作后台资源,包括html的资源引用路径我都不想改,所以只能增改settings.py里面的模板路径以及html的根路径(base标签),然后改完了发现有些路径比如“http://127.0.0.1:8000/static/coreui/dist/index.html”必须正常映射到“http://127.0.0.1:8000/index/”,否则会产生很多bug。

        于是,我就写了这样的代码:

from django.contrib import admin
from django.urls import path
from xxx import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
    path('index/', views.index),
    path('static/coreui/dist/<str:html>/', views.shift),

        path('static/coreui/dist/<str:html>/', views.shift) 无论如何都会出错。

        我检查了很多遍,网上的各种教程也没有细说这一点,直到我尝试把/static改成其他路径,才发现以/static开头的路径应该都是无法强制跳转的。


        如果要启用django的static静态文件,实际上很复杂,首先要在settings.py中如下设置(staticfiles这个目录疑似是没有任何用处)

STATIC_URL = '/static/'
if not DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "staticfiles"),
    ]
else:
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]

        在urls.py中添加如下代码:

from django.urls import path, re_path
from django.conf import settings
from django.views.static import serve
from . import views

urlpatterns += [
    re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}, name='static'),
]

        在开发环境下,要运行python manage.py collectstatic来访问这些静态资源。

参考:

Django 知识库:path()路径映射 - 知乎

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值