Django project base template

DjangoTemplatesProjectBase

Django Problem Overview


Can I create a base template for my project which all apps can draw from? Or do I have to create a base template for each app? And if I wanted them to be the same I'd just copy them?

Django Solutions


Solution 1 - Django

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

Solution 2 - Django

> 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/

Solution 3 - Django

> 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 %}

Solution 4 - Django

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.

Solution 5 - Django

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: https://stackoverflow.com/questions/1331148/how-do-i-use-djangos-template-extends-variable/1331183#1331183 for details,

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionheri0nView Question on Stackoverflow
Solution 1 - DjangoKenny ShenView Answer on Stackoverflow
Solution 2 - Djangomukesh.kumarView Answer on Stackoverflow
Solution 3 - DjangoMohammad.GhView Answer on Stackoverflow
Solution 4 - DjangoredDragonzzView Answer on Stackoverflow
Solution 5 - DjangogmagnoView Answer on Stackoverflow