I have a form that uploads several documents, but at the time of wanting to use them, I can not access them or the admin, I get an error 404, but the document is loaded to media_cdn. The project was made with django 1.10
Path of media_cdn Directory / media_cdn
Project route Directory / project / project / settings.py
LOGIN_REDIRECT_URL = reverse_lazy('solicitud:solicitud_listar')
LOGOUT_REDIRECT_URL = reverse_lazy('login')
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media_cdn")
directory of application URLs
directorio/project/apps/solicitud/urls.py
# -*- coding: utf-8 -*-
from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
import views
app_name = 'solicitud'
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'registrar_solicitud/$', views.AddSolicitud.as_view(), name='datos_candidato'),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
If I added the debug after the URLs pratrones
mi modelo
def upload_location_curp(instance, filename):
filename = "curp %s %s.pdf" % (instance.nombre, instance.apellidos)
return "%s %s/%s" % (instance.nombre, instance.apellidos, filename)
def upload_location_acta(instance, filename):
filename = "acta_%s %s.pdf" % (instance.nombre, instance.apellidos)
return "%s %s/%s" % (instance.nombre, instance.apellidos, filename)
def upload_location_domicilio(instance, filename):
filename = "domicilio_%s %s.pdf" % (instance.nombre, instance.apellidos)
return "%s %s/%s" % (instance.nombre, instance.apellidos, filename)
def upload_location_titulo(instance, filename):
filename = "titulo_%s %s.pdf" % (instance.nombre, instance.apellidos)
return "%s %s/%s" % (instance.nombre, instance.apellidos, filename)
class Solicitud(models.Model):
nombre = models.CharField(max_length=50)
apellidos = models.CharField(max_length=70)
email = models.EmailField(unique=True)
sexo = models.CharField(max_length=9, choices=SEXO_CHOICES)
fecha_nacimiento = models.DateField()
curp = models.CharField(max_length=18, unique=True)
curpFoto = models.FileField(upload_to=upload_location_curp, null=True, blank=True)
pais_origen = models.CharField(max_length=30, default="México")
lugar_nacimiento = models.CharField(max_length=100)
acta_nacimiento = models.FileField(upload_to=upload_location_acta, null=True, blank=True)
domicilio = models.CharField(max_length=120)
codigo_postal = models.CharField(max_length=5)
comprobante_domicilio = models.FileField(upload_to=upload_location_domicilio, null=True, blank=True)
telefono = models.CharField(max_length=20)
escuela_procedencia = models.CharField(max_length=50)
programa_solicitado = models.CharField(max_length=50, choices=PROGRAMA_SOLICITADO_CHOICES, default=MAS_ADMIN)
titulado = models.CharField(max_length=11, choices=ESTADO_TITULACION_CHOICES, default=YA_TITULADO)
titulacion_creditos = models.CharField(max_length=2, choices=TITULACION_CREDITOS_CHOICES, default=NO)
titulo = models.FileField(upload_to=upload_location_titulo, null=True, blank=True)
def __unicode__(self):
return u'Solicitud id: {}'.format(self.id)
My form
class SolicitudForm(forms.ModelForm):
class Meta:
model = Solicitud
fields = [
'nombre',
'apellidos',
'email',
'fecha_nacimiento',
'acta_nacimiento',
'sexo',
'curp',
'curpFoto',
'pais_origen',
'lugar_nacimiento',
'domicilio',
'comprobante_domicilio',
'codigo_postal',
'telefono',
'escuela_procedencia',
'programa_solicitado',
'titulado',
'titulacion_creditos',
'titulo',
]
labels = {
'nombre': 'Nombre(s)',
'apellidos': 'Apellidos',
'email': u'Correo Electrónico',
'fecha_nacimiento': 'Fecha de Nacimiento',
'acta_nacimiento': 'Acta de nacimiento',
'sexo': 'Sexo',
'curp': 'CURP',
'curpFoto': 'Comprobante de la CURP',
'pais_origen': 'Pais de origen',
'lugar_nacimiento': 'Lugar de Nacimiento',
'domicilio': 'Domicilio',
'codigo_postal': u'Código Postal',
'comprobante_domicilio': ' Comprobante de domicilio',
'telefono': u'Teléfono',
'escuela_procedencia': 'Escuela de Procedencia',
'programa_solicitado': 'Programa de Estudios Solicitado',
'titulado': u'Estado de su Titulación',
'titulacion_creditos': u'Titulación por créditos de Posgrado',
'titulo': u'Título de licenciatura',
}
widgets = {
'nombre': forms.TextInput(attrs={'class': 'form-control'}),
'apellidos': forms.TextInput(attrs={'class': 'form-control'}),
'email': forms.TextInput(attrs={'class': 'form-control'}),
'fecha_nacimiento': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
# 'fecha_nacimiento': forms.TextInput(attrs={'class': 'form-control'}),
'sexo': forms.Select(attrs={'class': 'form-control'}),
'curp': forms.TextInput(attrs={'class': 'form-control'}),
'pais_origen': forms.TextInput(attrs={'class': 'form-control'}),
'lugar_nacimiento': forms.TextInput(attrs={'class': 'form-control'}),
'domicilio': forms.TextInput(attrs={'class': 'form-control'}),
'codigo_postal': forms.TextInput(attrs={'class': 'form-control'}),
'telefono': forms.TextInput(attrs={'class': 'form-control'}),
'escuela_procedencia': forms.TextInput(attrs={'class': 'form-control'}),
'programa_solicitado': forms.Select(attrs={'class': 'form-control'}),
'titulado': forms.Select(attrs={'class': 'form-control'}),
'titulacion_creditos': forms.Select(attrs={'class': 'form-control'}),
}
and my view that calls the form
class AddSolicitud(CreateView):
model = Solicitud
form_class = SolicitudForm
template_name = 'solicitud/solicitud_form.html'
success_url = reverse_lazy('solicitud:home')