2017-01-17 13 views
0

私はDjango Webアプリケーションに画像を追加しようとしています。私はこのようなものになります私のmodels.pyでのモデルがあります:ImageFieldのURLが空の文字列を返す

# 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のために私が持っている:私のsettings.pyについて

# 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() 

を私は次のコードを持っています次

# 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を取得しようとすると、その後、私のテンプレートに:

​​

私が現れて、タイトルを持っていますが、画像は表示されません。なぜこれが起こっている上の任意のアイデア

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

:私は、ページのソースコードをチェックすると私はイメージタグapperingがありますか?ここ は、私が実行したときに、データベースから出力されます:あなたの元のファイルを見た後、これは次のようになります。

ラテンダミーコードが一部である
--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

はい、Imageをアップロードしたところでfooオブジェクトを作成しましたが、表示しようとしています –

+1

データベースに値を投稿してください。 – 2ps

答えて

1

はるかに単純な問題。

FeaturedImageモデルでは、Imagemフィールドではなく、Imageフィールドがあります。タイプミスかどうかは分かりませんが、正しく貼り付けられていれば問題の原因になります。

つまり、あなたが試してみてください:

<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()元のものを投稿すると、おそらくエラーを見やすくなります。事は、私のテンプレート上の残りのコンテンツを参照することができますは動作しない画像だけです –

+0

ちょうど元のファイルを投稿したことは役立ちますか? –

関連する問題