【问题标题】:Nginx, gunicorn, ubuntu 16.06 - uploaded images not displayingNginx、gunicorn、ubuntu 16.06 - 上传的图片不显示
【发布时间】:2018-01-03 02:17:08
【问题描述】:

人类同胞

我已经在这个问题上待了几天,非常感谢一些帮助。所以我成功地部署了我的应用程序,一切正常,包括 css 和 javascript,除了这个小东西,我确定这只是我缺少的一个小修复,导致我上传的图像即使我看到“上传成功”页面也没有显示。

我的图像模型

class Image(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         related_name='images_created')
    title = models.CharField(max_length=2000)
    slug = models.SlugField(max_length=200,
                        blank=True)
    url = models.URLField()
    image = models.ImageField(upload_to='/home/kingiyk/stylplus/media/')
    description = models.TextField(blank=True, null=True)
    created = models.DateField(auto_now_add=True,
                                            db_index=True)
    users_like = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                                related_name='images_liked', blank=True)

    tags = TaggableManager()

    class Meta:
        ordering = ('-created',)




    def __str__(self):
        return self.title


    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
            super(Image, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('images:detail', args=[self.id, self.slug])

我的 nginx 配置

server {
    listen 80;
    server_name 67.207.87.22;

    location = /favicon.ico { access_log off; log_not_found off;

    }

    location /static/ {
        alias /home/kingiyk/stylplus/static;
    }

    location /media/ {
        alias /home/kingiyk/stylplus/media;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/kingiyk/stylplus/stylplus.sock;
    }
}

我上传的图片位于 /home/kingiyk/stylplus/media/ 所以至少我知道它们被保存了。

这是我的设置文件:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))





DEBUG = False

ALLOWED_HOSTS = ['67.207.87.22', 'styllplus.com', 'www.styllplus.com']



ROOT_URLCONF = 'stylplus.urls'



WSGI_APPLICATION = 'stylplus.wsgi.application'









STATIC_URL = '/static/'
STATIC_ROOT = '/home/kingiyk/stylplus/static/'




from django.core.urlresolvers import reverse_lazy

LOGIN_REDIRECT_URL = reverse_lazy('dashboard')
LOGIN_URL = reverse_lazy('login')
LOGOUT_URL = reverse_lazy('logout')

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'



ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda u: reverse_lazy('user_detail', args=[u.username])
    }

SITE_ID = 1


DJANGO_MESSAGES_NOTIFY = False

这是我的 html 上传页面,应该显示图像

{% extends "base.html" %}

{% load staticfiles %}


{% block title %}{{ user.username }}{% endblock %}
{% block content %}
{% load thumbnail %}
<div id="lonely">
 {% thumbnail image.user.profile.photo "40" as in %}
    <a href="{{ image.user.get_absolute_url }}">
        <img src="{{ in.url }}" class="gametime"></a>
        {% endthumbnail %}
<a href="{{ image.user.get_absolute_url }}" class="time">{{ image.user.username }}</a>

<div id="details">
{% thumbnail image.image "551" as im %}

    <a href="{{ image.image.url }}">
        <img src="{{ im.url }}" alt="{{ image.title }}"class="image-detail">
    </a>

{% endthumbnail %}

{% with total_likes=image.users_like.count users_like=image.users_like.all %}
    <div class="image-info">
     <div>
        <span class="count">
            <span class="total">{{ total_likes }}</span>
            like{{ total_likes|pluralize }}
        </span>
        {% with comments.count as total_comments %}

{{ total_comments }} comment{{ total_comments|pluralize }}

{% endwith %}

{% if request.user 不在 users_like %} 喜欢 {% 别的 %} 不像 {% 万一 %}

    </div>
    {{ image.title|linebreaks }}
</div>

<div id="my-chart"></div>
<div class="image-likes">
    Liked by
    {% for user in image.users_like.all %}
        <div>
            {% thumbnail user.profile.photo "30" as in %}
            <img src="{{ in.url }}" class="gametime">
            {% endthumbnail %}
            <a href="{{ user.get_absolute_url }}">{{ user.username }}

        </div>
    {% empty %}

    {% endfor %}
</div>
{% endwith %}




{% for comment in comments %}
<div class="image-info">
<p class="info">


    <a href="{{ comment.user.get_absolute_url }}" class="mine">{{      

     comment.user }}</a> {{ comment.comment }}

</p>

除了图像不可见之外,其他一切都很好 我看不出是什么毛病。非常感谢您的宝贵时间

【问题讨论】:

    标签: python django nginx digital-ocean


    【解决方案1】:

    如果要显示媒体文件,您需要添加媒体 url 和 root 来告诉 django 在哪里查找媒体

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR,'media')
    

    settings.py中添加这两行

    如果您在主urls.py 中添加了STATIC_URLSTATIC_ROOT,则添加MEDIA_URLMEDIA_ROOT 作为静态。

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL , document_root=settings.MEDIA_ROOT)
    

    将这些行添加到您的 urls.py

    【讨论】:

    • from django.conf.urls import include, url from django.contrib import admin from django.conf import settings from django.conf.urls.static import static from django.conf.urls import patterns from django .views.generic import RedirectView admin.autodiscover() from django.shortcuts import render urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^account/', include( 'account.urls')), url(r'^images/', include('images.urls', namespace='images')), url(r'^cmets/', include('django_cmets.urls') ), ] 这里是我的 urls.py 文件。你能在 urls.py conf 上澄清更多吗?
    • 在设置文件中添加这行后,不行吗??
    • 它仍然不显示。另外,当我输入 python manage,py collectstatic 命令时,css、js 文件和一些 png 文件被收集并存储在 /home/kingiyk/stylplus/static 但我上传的文件(主要是 .jpg)没有。你知道这是为什么吗?我猜这可能是我问题的根源。
    • 尝试编辑后的ans,之后需要重新上传图片作为媒体,然后签入模板
    • 你是对的。我认为问题出在我的模板 当我用 {% static "rango.jpg" %} 替换 "{{ image.image }}" 时,图像显示但img src="{{ image.image }} 不显示图像。我有一个名为 image 的类模型,它带有一个 upload_to 属性,它将我的文件上传到 /home/kingiyk/stylplus/static/ 并在我的 settings.py 中,我've got STATIC_ROOT= '/home/kingiyk/stylplus/static/' STATIC_URL= '/static/'。知道我哪里出错了吗?- PS-我正处于生产阶段。-部署
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多