Добрый день, пробую сделать сайт на Django, хочу вывести на главную страницу кейсы с их превью, но тестовый сервер Django каждый раз отвечает 404 ошибкой. (Django 1.9)
Перерыл уже все форумы и документацию по Джанго, но решения так и не нашёл.
В браузере экранируется такой урл: 127.0.0.1:8000/static/media/images/2.jpg
BASE_DIR имеет такой вид: BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
Папка static лежит в корне каталога, по соседству c папкой приложения и проекта, manage.py и тд
models.pyfrom django.db import models
class Case(models.Model):
case_name = models.CharField(max_length=30)
case_preview = models.ImageField(upload_to='images')
def __str__(self):
return self.case_name
settings.pySTATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media/')
MEDIA_URL = '/static/media/'
urls.py (который лежит в директории проекта, а не приложения)from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
urlpatterns = patterns('',
url(r'^landing/', include('landing.urls', namespace="landing")),
url(r'^admin/', admin.site.urls),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.pyfrom django.shortcuts import get_object_or_404, render
from django.views import generic
from .models import Case
class IndexView(generic.ListView):
template_name = 'landing/index.html'
context_object_name = 'case_list'
def get_queryset(self):
return Case.objects.all()
index.html{% if case_list %}
<ul>
{% for case in case_list %}
<img src="{{ MEDIA_URL }}{{ case.case_preview.url }}"/>
<li>{{ case.case_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No cases are available.</p>
{% endif %}
При этом путь до изображения на диске верен:
>>> c = Case(case_name="Pic", case_preview="images/2.jpg")
>>> c.save()
>>> c.case_preview
<ImageFieldFile: images/2.jpg>
>>> c.case_preview.path
'C:\\Users\\Oskin\\Desktop\\pyProject\\uni\\static\\media\\images\\2.jpg'
>>> c.case_preview.url
'/static/media/images/2.jpg'
>>>