2017-01-17 1 views
0

Я пытаюсь добавить фотографии в свое веб-приложение Django. У меня есть модель в моем models.py, который, который выглядит примерно так:ImageField url возвращает пустую строку

# models.py 

from django.db import models 

# Create your models here. 
class Protese(models.Model): 
    '''Proteses usadas no High Five''' 

    # Parte independente da lingua 
    Nome = models.CharField(max_length = 200) 
    Autores = models.CharField(max_length = 200) 
    AutoresURL = models.CharField(max_length = 200) 
    Foto = models.ImageField() 
    Data = models.DateTimeField() 

    # Portugues 
    Descricao = models.TextField() 
    # Ingles 
    Description = models.TextField() 

    def __str__(self): 
     return self.Nome 

class Membro(models.Model): 
    '''Membros do projeto''' 

    # Parte independente da lingua 
    Nome = models.CharField(max_length = 200) 
    Foto = models.ImageField() 
    LinkedIn = models.CharField(max_length = 200) 
    # Portugues 
    Posicao = models.CharField(max_length = 200) 
    Frase = models.TextField() 
    # Ingles 
    Position = models.CharField(max_length = 200) 
    Quote = models.TextField() 

    def __str__(self): 
     return self.Nome 


class FeaturedImage(models.Model): 
    ''' Imagem que aparece no comeco da pagina principal''' 
    Image = models.FileField() 
    # Portugues 
    Titulo = models.CharField(max_length = 200) 
    Texto = models.TextField() 
    # Ingles 
    Title = models.CharField(max_length = 200) 
    Text = models.TextField() 

class Post(models.Model): 
    ''' Posts de noticias ''' 
    Imagem = models.ImageField() 
    # pt 
    Titulo = models.CharField(max_length = 200) 
    Texto = models.TextField() 
    # en 
    Title = models.CharField(max_length = 200) 
    Text = models.TextField() 

Для моего settings.py У меня есть следующий код:

# settings.py 
# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.9/howto/static-files/ 

STATIC_URL = '/static/' 

STATIC_ROOT = posixpath.join(*(BASE_DIR.split(os.path.sep) + ['static'])) 

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

и для моего urls.py я имею следующий:

# urls.py 

from datetime import datetime 
from django.conf.urls import url 
import django.contrib.auth.views 

import app.models as models 
import app.views as views 

# Uncomment the next lines to enable the admin: 
from django.conf.urls import url,include 
from django.contrib import admin 
admin.autodiscover() 

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    # Pagina principal 
    url(r'^$',views.index,kwargs = {'lang':'pt'} ,name = 'index'), 
    url(r'^index.html$',views.index,kwargs = {'lang':'pt'} ,name = 'index'), 
    url(r'^en/$',views.index,kwargs = {'lang':'en'} ,name = 'index'), 
    url(r'^en/index.html$',views.index,kwargs = {'lang':'en'} ,name = 'index'), 
    # Sobre nos 
    url(r'^about.html$',views.about, name = 'about'), 
    # Servicos 
    url(r'^services.html$',views.services, name = 'about'), 
    # Contato 
    url(r'^contact.html$',views.contact, name = 'about'), 
    # Proteses 
    url(r'^single/(?P<page_name>[A-Za-z0-9]+)/$',views.single, name='single'), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    url(r'^admin/', include(admin.site.urls)), 
] 

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

Я рендеринг моего взгляда, используя следующий views.py функции:

# views.py 
def index(request, lang): 
    context = { 
     'featured_images':FeaturedImage.objects.all(), 
     'proteses': Protese.objects.all(), 
     'posts': Post.objects.all(), 
     'lang': lang 
     } 
    return render(request, 'web/index.html',context) 

но на моем шаблоне, когда я пытаюсь получить URL изображения, набрав:

  <ul class="slides"> 
        {% for image in featured_images %} 
        <li> 
         <div class="banner-bottom" style="background: url({{ image.Imagem.url }})no-repeat center;"> 
          <div class="container"> 
           <div class="bann-text"> 
            {% if lang == 'pt' %} 
             <h3> {{image.Titulo}} </h3> 
             <p>{{image.Texto}}</p> 
             <p>{{image.Imagem}}</p> 
            {% else %} 
             <h3> {{image.Title}} </h3> 
             <p>{{image.Text}}</p> 
            {% endif %} 
           </div>    
          </div> 
         </div> 
        </li> 
        {% endfor %}     
       </ul> 

У меня есть название показ, но изображение не появляется. Когда я проверить исходный код страницы У меня есть тег изображения appering как:

<div class="banner-bottom" style="background: url()no-repeat center;"> 

Любая идея о том, почему это происходит? Вот выход из базы данных при запуске:

--dbshell 
select * from app_foo; 
1|Lorem Ipsum|At vero eos et accusamus et iusto odio dignissimos|Lore Ipsum|Sed ut perspiciatis unde omnis iste natus error|1.png 

Где латинский фиктивный кодом является частью Os других вещей в моей модели

+1

Foo имеет значение, установленное ли для изображения в базе данных? – 2ps

+0

Да, я создал объект foo, где я загрузил изображение, и я пытаюсь его отобразить –

+1

Можете ли вы разместить значения в базе данных? – 2ps

ответ

1

Update: после просмотра исходных файлов, это выглядит как гораздо более простая проблема.

На вашей модели FeaturedImage у вас есть поле Image, а не поле Imagem. Я не знаю, была ли это опечатка или нет, но если бы это было правильно вставлено, это было бы источником проблемы.

т.е., вы должны попробовать:

<div class="banner-bottom" style="background: url({{ image.Image.url }})no-repeat center;"> 

Imagem это поле на вашей Post модели, и это может быть источником путаницы.


Ваше мнение похоже, что это не могло бы работать, так что может быть проблемой, если это реальный вид файла:

# views.py 
def renderFoo(request): 
    # The below would give you a syntax error 
    context = { 
     'foos' = foo.objects.all(), 
     ''' other models here ''' 
    } 
    # You should be using: 
    context = { 
     'foos': foo.objects.all(), 
     # other models here 
    } 
    return render(request,'path/to/page.html',context)  

И он должен работать правильно. Доступ к полю url, как и вы, находится на вид the proper way to access the image URL.

>>> car = Car.objects.get(name="57 Chevy") 
>>> car.photo 
<ImageFieldFile: chevy.jpg> 
>>> car.photo.name 
'cars/chevy.jpg' 
>>> car.photo.path 
'/media/cars/chevy.jpg' 
>>> car.photo.url 
'http://media.example.com/cars/chevy.jpg' 
+0

К сожалению, это была опечатка в переполнении стека, это не фактический файл просмотра, в файле вида это «foos»: foo.objects.all() I будет опубликовать оригинал, вероятно, будет легче увидеть ошибку. Дело в том, что я могу ссылаться на остальную часть контента на моем шаблоне - это просто изображение, которое не работает –

+0

Только что опубликованные исходные файлы помогают? –

Смежные вопросы