Oi Pessoal,
Estou construindo um CMS e tenho um módulo chamado diretoria, lá eu
coloco os dados do diretor e um campo ImageField, segue o model:
--> models.py
class Diretoria(models.Model):
codigo_diretor = models.AutoField('Código Diretoria',
primary_key=True)
codigo_topico = models.ForeignKey(Topico, related_name='+',
verbose_name='Tópico')
nome_diretor = models.CharField('Nome',max_length=200)
email_diretor = models.EmailField('e-mail', blank=True, null=True)
celular_diretor = models.CharField('Celular', max_length=20,
null=True, blank=True)
foto_diretor = models.ImageField('Foto
Diretor(a)',upload_to='media', blank=True, null=True, )
class Meta:
verbose_name_plural = 'Diretoria'
verbose_name = 'Diretoria'
Até aqui tudo bem, ele gera certinho a tabela no banco e tals, agora
vamos ao admin.py
class DiretoriaAdmin(admin.ModelAdmin):
fields = ('codigo_topico', 'nome_diretor', 'email_diretor',
'celular_diretor', 'foto_diretor', 'codigo_cargo', 'topicos',)
list_display = ('nome_diretor', 'codigo_cargo',
'codigo_topico','foto_diretorFunc')
list_display_links = ('codigo_topico', 'nome_diretor',
'codigo_cargo', 'foto_diretorFunc')
search_fields = ['nome_diretor',
'codigo_topico__descricao_topico']
list_filter = ['codigo_cargo','codigo_topico__descricao_topico']
def foto_diretorFunc(self, obj):
return u'<img src=media/%s/>' % (obj.foto_diretor)
foto_diretorFunc.short_description = 'Fotografia'
foto_diretorFunc.allow_tags = True
criei a função foto_diretorFunc para pegar a imagem e retorna como
html para o template do admin do django mostrar, mas as imagens vem
como link quebrado, já pesquisei tudo que é jeito como ele poderia
mostrar a imagem na lista de registros do django admin, segue a
configuração do meu settings
# Django settings for portal project.
import os
PROJECT_ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
print PROJECT_ROOT_PATH
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', '
your_...@domain.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add
'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'portal', # Or path to database
file if using sqlite3.
'USER': 'postgres', # Not used with
sqlite3.
'PASSWORD': '123456', # Not used with
sqlite3.
'HOST': 'localhost', # Set to empty
string for localhost. Not used with sqlite3.
'PORT': '5432', # Set to empty string for
default. Not used with sqlite3.
}
}
# Local time zone for this installation. Choices can be found here:
#
http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as
your
# system time zone.
TIME_ZONE = 'America/Campo_Grande'
# Language code for this installation. All choices can be found here:
#
http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pt-br'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as
not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True
# Absolute filesystem path to the directory that will hold user-
uploaded files.
# Example: "/home/media/
media.lawrence.com/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT_PATH, 'media')
print MEDIA_ROOT
# URL that handles the media served from MEDIA_ROOT. Make sure to use
a
# trailing slash if there is a path component (optional in other
cases).
# Examples: "
http://media.lawrence.com", "
http://example.com/media/"
MEDIA_URL = '/media/'
print MEDIA_URL
# URL prefix for admin media -- CSS, JavaScript and images. Make sure
to use a
# trailing slash.
# Examples: "
http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/admin_media/'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '-$#h8*o7ek$ofgkv7r4(3$34ly7u3hp+jvb_49cks70*d(tpdz'
# List of callables that know how to import templates from various
sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
ROOT_URLCONF = 'portal.urls'
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT_PATH, 'templates')
# Put strings here, like "/home/html/django_templates" or "C:/www/
django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'siems',
#'django.contrib.admindocs',
)
e o arquivo urls.py
from django.conf.urls.defaults import *
from django.conf import settings
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^$', 'siems.views.index'),
(r'^admin/', include(admin.site.urls)),
)
Eu acho que é algum erro de url roteamento, não sei o que está
faltando e como fazer para ele achar e mostrar estas imagens, fazer o
upload no local certo isso está, mas o inverso não acontece.
Qualquer dica?
obrigado