Search code examples
djangodjango-staticfiles

Static url goes after the regular page url


My static files only load on index page, but when navigating to another page like: examle_url/page, it returns a 404 error since it loads it like that: http://127.0.0.1:8000/categories/default/static/js/main.js, see the static loads after page

settings.py

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


STATICFILES_DIRS = (
  os.path.join(BASE_DIR, '/static/base'),
)

urls.py "all my urls are in main directory and then i import views from apps"

urlpatterns = [
    path('admin/', admin.site.urls),
    path('profile/', profile, name="profile"),
    path('', index, name="index"),
    path('category/', category, name="category"),
]

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

If it matters my load static files are all in theme.html file and is then extended in all other html files.

Any help will be greatly appreciated, thanks in advance!


Solution

  • You should prepend the STATIC_URL setting [Django-doc] with a slash:

    # settings.py
    
    # …
    # with a leading slash
    STATIC_URL = '/static/'
    # …

    If you do not do that, then the url will look like static/js/main.js. If the path does not start with a slash, then that is relative to path the current URL, and thus if the page is /categories/default, it will look at /categories/default/static/js/main.js.