我有一个django应用程序发送包含图像文件作为MIME附件的电子邮件.电子邮件是从views.py发送的,但为了附加文件,我需要获取图像的完整路径名,因此python可以打开它们.这些文件在我的应用程序的静态文件夹中,但我似乎无法找到一种方法,我可以在开发模式下的文件系统上获取文件的完整路径- 它在收集静态后在生产中工作正常,但在开发中,它无法找到该文件,因为静态文件是从开发中的各个应用程序文件夹中提供的.
Pal*_*ron 21
使用取景器模块的Django
from django.contrib.staticfiles import finders
result = finders.find('css/base.css')
searched_locations = finders.searched_locations
Run Code Online (Sandbox Code Playgroud)
String result
是文件系统路径,如果找不到,请仔细检查searched_locations
mad*_*han 19
project_dir.url添加到文件末尾
if DEBUG:
urlpatterns += patterns(
'',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': STATIC_ROOT}),
)
Run Code Online (Sandbox Code Playgroud)
project_dir.settings
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static_debug')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)
制作dirs media&static_debug(将它们添加到.gitignore)
project_dir/
static/
image.jpg
settings.py
urls.py
apps/
__init__.py
some_app/
static/
some_app/
css/
style.css
media/
static_debug/
Run Code Online (Sandbox Code Playgroud)
现在您可以直接运行项目
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
从视图访问
from django.templatetags.static import static
static('image.jpg')
static('some_app/css/style.css')
Run Code Online (Sandbox Code Playgroud)
从模板访问
{% load staticfiles %}
{% static 'image.jpg' %}
{% static 'some_app/css/style.css' %}
Run Code Online (Sandbox Code Playgroud)
在犯了很多错误之后,以下事情对我有用..
假设您有以下目录结构(感谢@madzohan)
project_dir/
static/
image.jpg
settings.py
urls.py
apps/
__init__.py
some_app/
static/
some_app/
css/
style.css
Run Code Online (Sandbox Code Playgroud)
现在如果你想获取project_dir/static/image.py的路径那么
在您的 project_dir/settings.py 文件中,在文件范围内定义一个 STATIC_DIR 变量,例如。(如果之前没有做过)
项目目录/settings.py
import os
# after your other file variables
STATIC_DIR = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)
现在在您要访问 /static/image.jpg 文件的 app_name/views.py 文件中
应用程序名称/views.py
import os
from project_dir.settings import STATIC_DIR
# here I want the /static/image.jpg file then
image = os.path.join(STATIC_DIR, 'image.jpg')
Run Code Online (Sandbox Code Playgroud)
然后您可以通过 image 变量访问 image.jpg 文件
希望这对你有用
归档时间: |
|
查看次数: |
15348 次 |
最近记录: |