[Django]-Django project base template

106๐Ÿ‘

โœ…

Sure you can. A quick example of a base.html

<!DOCTYPE html>
<html>
    <head>
        <title>My Project</title>
    </head>

    <body>
    {% block content %}{% endblock content %}
    </body>
</html>

And say you have a app called myapp with a view.html page,

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
{% endblock content %}

Take some time to read the docs for more information

๐Ÿ‘คKenny Shen

40๐Ÿ‘

For Django version 3

Some of the answers here are correct, but they do not tell you where to place the files in the directory structure. So I am going to explain the answer a bit.


Yes, you can use {% extends "base.html" %} to extend the base.html file from your project directory.
Important thing to note is where to place the base.html file.

  1. open project_name/project_name/settings.py and find the TEMPLATES array
    and update the 'DIRS' : [] to 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  2. Create a directory at root level named templates. The location of this folder will be project_name/templates
  3. Place all templates here in projects_name/templates that you want to access from all the apps.
    File: project_name/templates/base.html
  4. Extend this base file from any application-specific template, that might be located at project_name/app_name/templates/app_name/template_file.html by using {% extends "base.html" %}.

    {% extends "base.html" %}
    
    {% block content %}
        <h2>Content for My App</h2>
        <p>Stuff etc etc.</p>
    {% endblock content %}
    

Additionally, you can also create project-wide static directory at the same level as template directory by updating STATICFILES_DIRS to STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] in project_name/project_name/settings.py.


Final Directory Structure looks like โ€“

project_name/
    app_name/
        templates/
            app_name/
                template_file.html

    project_name/
        settings.py

    templates/
        base.html

    static/
        css/
        js/
        img/
๐Ÿ‘คmukesh.kumar

9๐Ÿ‘

There is some problem in last answer and here is the correct one;
you must have Base.html like this:

{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
    <title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

and also for index.html

{% extends "appname/base.html" %}
{% block content %}
     <h1>test</h1>
{% endblock %}
๐Ÿ‘คMohammad.Gh

7๐Ÿ‘

Yes you can absolutely do that. By using extends and include template tags in your Django templates.

I am starting to learn Django and recently figured this out. My code is at Github if you are interested in taking a look at how I structure Django templates to inherit from a base.html and then include common stuff such as navbar and header, footer etc.

๐Ÿ‘คredDragonzz

0๐Ÿ‘

Yes, you can create a base template for your project that other apps will extend. Check @Kenny_Shen answer on how.

Just wanted to add two notes if you are concerned about app isolation.

  1. If you do not want your app to rely on the โ€œbase.htmlโ€ naming convention, you can inject the actual name with a variable, take a look at: How do I use Django's template extends variable? for details,

  2. You might want to name the app template block to something else, not โ€œcontentโ€ to avoid collisions with other apps.

๐Ÿ‘คgmagno

Leave a comment