使用模板标签找不到Django图像

哈姆兹迪欧

我已经麻烦了很多天,给出的所有解决方案都没有帮助我。如果我使用模板变量 {{ userprofile.photo.url}}(结果是 Alt 文本),我想显示的图像配置文件不会出现,但是当我像这样放置图像路径时它确实有效:/仪表板/媒体/仪表板/照片/配置文件/用户.png。

我试过调试,看起来 url 不错,但给出的结果是这样的:

[27/Nov/2017 13:55:07] "GET /dashboard/ HTTP/1.1" 200 44757
Not Found: /media/dashboard/photos/profils/user.png
[27/Nov/2017 13:55:07] "GET /media/dashboard/photos/profils/user.png HTTP/1.1" 404 2295

这里是项目的文件:

项目结构:

project_dir/
 dash-app/
    __init__.py
    settings.py
    urls.py
    wsgi.py
 dashboard/
    __init__.py
    admin.py
    app.py
    forms.py
    models.py
    urls.py
    views.py
    ...
  templates/
    dashboard/
       index.html
       ...
  static/
    dashboard/
      images/
         logo9.png
         ...
  media/
    dashboard/
      photos/
        profils/
           user.png
           ...

在 urls.py 上:

from django.conf.urls import url
from dashboard import models
from dashboard import views
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    url(r'^$', views.index, name='index'),
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

在 settings.py 上:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(BASE_DIR, "dashboard", "static")

#dashboard/media/
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "dashboard", "media", "dashboard")

在 models.py 上:

from django.core.files.storage import FileSystemStorage

image_storage = FileSystemStorage(
    # Physical file location ROOT
    location='{0}/'.format(settings.MEDIA_ROOT),
    # Url for file
    base_url='{0}/dashboard/'.format(settings.MEDIA_URL),
)

def image_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/dashboard/picture/<filename>
    return 'photos/profils/{0}'.format(filename)

def logo_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/dashboard/picture/<filename>
    return 'photos/logos/{0}'.format(filename)

...

   # Photos
    photo = models.ImageField(blank=True, 
                              upload_to=image_directory_path, 
                              storage=image_storage)

    # Logo de l'activité
    photo = models.ImageField(null=True, 
                              upload_to=logo_directory_path, 
                              storage=image_storage)

在 views.py 上:

def index(request):
    connected = models.UserProfile.objects.get(user=request.user)
    print(connected.photo.url)
    context={
        'userprofile':connected,
    }    
    return render(request, 'dashboard/index.html', context)

在 index.html 上:

 <!-- menu profile quick info -->
  <div class="profile clearfix">
    <div class="profile_pic">

    {% if userprofile.photo %}
        <img src="{{ userprofile.photo.url }}" alt="User" class="img-circle profile_img">
    {% else %}
        <img src="media/dashboard/photos/profils/user.png" alt="..." class="img-circle profile_img">
    {% endif %}
    </div>
    <div class="profile_info">
      <span>Bienvenu,</span>
      <h2>{{ userprofile }}</h2>
    </div>
  </div>
  <!-- /menu profile quick info -->

我正在使用 python 3 和 Django 1.11.5 谢谢你的帮助!

编辑:我已经在私人导航上打开了应用程序以重新加载并查看缓存中是否有内容,并且我知道我发现没有任何效果,无论是 :{{ userprofile.photo.url|slice:"1:" }}还是media/dashboard/photos/profils/user.png. 有什么东西可以将>media 的文件链接重新加载到项目或类似的东西。因为如果手动将图像添加到文件夹中,或者我通过 Django 管理界面上传它,有什么区别吗?

解决:我改变了这些行:MEDIA_ROOT = os.path.join(BASE_DIR, "dashboard", "media", "dashboard")MEDIA_ROOT = os.path.join(BASE_DIR, "dashboard", "media")

image_storage = FileSystemStorage( # Physical file location ROOT location='{0}/'.format(settings.MEDIA_ROOT), # Url for file base_url='{0}/dashboard/'.format(settings.MEDIA_URL), )

image_storage = FileSystemStorage( # Physical file location ROOT location='{0}/dashboard/'.format(settings.MEDIA_ROOT), # Url for file base_url='{0}/dashboard/'.format(settings.MEDIA_URL), )

哈姆兹迪欧

解决了 :

我改变了这些线路:MEDIA_ROOT = os.path.join(BASE_DIR, "dashboard", "media", "dashboard")MEDIA_ROOT = os.path.join(BASE_DIR, "dashboard", "media")

image_storage = FileSystemStorage(
          # Physical file location ROOT
          location='{0}/'.format(settings.MEDIA_ROOT),
          # Url for file
          base_url='{0}/dashboard/'.format(settings.MEDIA_URL),
      )

image_storage = FileSystemStorage(
          # Physical file location ROOT
          location='{0}/dashboard/'.format(settings.MEDIA_ROOT),
          # Url for file
          base_url='{0}/dashboard/'.format(settings.MEDIA_URL),
      )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

灰烬找不到模板

来自分类Dev

django模板标签,使用数组输出

来自分类Dev

Django找不到玉模板

来自分类Dev

Django Ckeditor图像浏览器找不到图像

来自分类Dev

在Django {%%}标签内使用AngularJS模板标签

来自分类Dev

BeautifulSoup找不到标签

来自分类Dev

Django找不到模板目录

来自分类Dev

使用Berkshelf时找不到菜谱模板

来自分类Dev

PyCharm 5找不到Django 1.9模板

来自分类Dev

在视图而不是模板中使用Django静态URL生成图像标签

来自分类Dev

静态文件图像找不到Django

来自分类Dev

从模板中删除图像会导致使用Gatsby找不到文件?

来自分类Dev

JavaScript在Django模板中找不到ID

来自分类Dev

Beautifulsoup找不到标签

来自分类Dev

在Django中找不到模板网址

来自分类Dev

哪个模板标签包含使用django-storage [dropbox]存储的图像

来自分类Dev

锚点和图像标签找不到PHP文件或图像

来自分类Dev

找不到Django主页的模板

来自分类Dev

如何调试Django为什么找不到模板的原因

来自分类Dev

Django Ckeditor图像浏览器找不到图像

来自分类Dev

使用Django找不到页面

来自分类Dev

cloudinary django响应式图像模板标签

来自分类Dev

ImageIO找不到图像

来自分类Dev

nunjucks:找不到模板

来自分类Dev

BeautifulSoup 找不到标签

来自分类Dev

Django - 使用通用视图找不到 URL

来自分类Dev

在 React & Django 中使用 webpack 的 URL 加载器时找不到图像文件

来自分类Dev

Django urls 找不到带有 HTML 文件的模板

来自分类Dev

Beautifulsoup:找不到标签