Django urls.py error – python nodejs django

Pregunta:


Buenos días,
Estoy intentando meter el ‘MEDIA_ROOT’ en ‘urls.py’ pero cuando ejecuto el ‘runserver’ me aparece el siguiente error:

File
“C:UsersManuxDesktoppd110libsite-packagesdjangoconfurlsstatic.py”,
line 24, in static
raise ImproperlyConfigured(“Empty static prefix not permitted”) django.core.exceptions.ImproperlyConfigured: Empty static prefix not
permitted

Este es mi ‘urls.py’:

from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from boletin.views import inicio


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', inicio, name='inicio')
]

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

Aquí está mi ‘settings.py’:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_env", "static_root")

STATIC_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_env", "media_root")

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static_pro", "static"),
]

Así es mi árbol de directorios:

ArbolDirectorios

Os pongo el error completo que me da el ‘runserver’.

Unhandled exception in thread started by Traceback (most recent call last): File
“C:UsersManuxDesktoppd110libsite-packagesdjangoutilsautoreload.py”,
line 226, in wrapper
fn(*args, **kwargs) File “C:UsersManuxDesktoppd110libsite-packagesdjangocoremanagementcommandsrunserver.py”,
line 121, in inner_run
self.check(display_num_errors=True) File “C:UsersManuxDesktoppd110libsite-packagesdjangocoremanagementbase.py”,
line 385, in check
include_deployment_checks=include_deployment_checks, File “C:UsersManuxDesktoppd110libsite-packagesdjangocoremanagementbase.py”,
line 372, in _run_checks
return checks.run_checks(**kwargs) File “C:UsersManuxDesktoppd110libsite-packagesdjangocorechecksregistry.py”,
line 81, in run_checks
new_errors = check(app_configs=app_configs) File “C:UsersManuxDesktoppd110libsite-packagesdjangocorechecksurls.py”,
line 14, in check_url_config
return check_resolver(resolver) File “C:UsersManuxDesktoppd110libsite-packagesdjangocorechecksurls.py”,
line 24, in check_resolver
for pattern in resolver.url_patterns: File “C:UsersManuxDesktoppd110libsite-packagesdjangoutilsfunctional.py”,
line 35, in get
res = instance.dict[self.name] = self.func(instance) File “C:UsersManuxDesktoppd110libsite-packagesdjangourlsresolvers.py”,
line 310, in url_patterns
patterns = getattr(self.urlconf_module, “urlpatterns”, self.urlconf_module) File
“C:UsersManuxDesktoppd110libsite-packagesdjangoutilsfunctional.py”,
line 35, in get
res = instance.dict[self.name] = self.func(instance) File “C:UsersManuxDesktoppd110libsite-packagesdjangourlsresolvers.py”,
line 303, in urlconf_module
return import_module(self.urlconf_name) File “c:python27Libimportlib__init__.py”, line 37, in import_module
import(name)

Espero vuestra ayuda, un saludo y gracias de antemano.

Preguntado por: manuxdjent

German Alzate

Me costó bastante encontrar el error, pero lo encontré:

Este es tu código (acabo de copiarlo y pegar):

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "static_env", "static_root")

STATIC_URL = '/media/'
MEDIA_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "static_env", "media_root")

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static_pro", "static"),
]

Revisando un poco el código de Django, y fuí a la linea exacta donde tira el error, es esta: y veo que la única forma que te salga ese error, es que no estes enviando una variable con algún valor.

Ahora, si ves tu código, verás que tienes STATIC_URL = '/static/' y mas abajo tienes nuevamente STATIC_URL = '/media/', lo cual quiere decir que nunca definiste en tu settings la variable MEDIA_URL = '/media/', por lo que django al crearla por defecto, la tiene vacia (''), y dado esto es que se genera el error. Está de más decir que para solucionarlo debes cambiar el segundo STATIC_URL = '/media/' por MEDIA_URL = '/media/'

Cualquier duda, pregunta, comenta 🙂

Probá cambiando esto:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', inicio, name='inicio')
]

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

Por la forma oficial de la documentación:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', inicio, name='inicio')
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Recuerda que esta configuración en producción debe delegarse al servidor a través de la configuración que te provea el hosting.

Espero haberte ayudado.

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *