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
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.
- open
project_name/project_name/settings.py
and find theTEMPLATES
array
and update the'DIRS' : []
to'DIRS': [os.path.join(BASE_DIR, 'templates')]
- Create a directory at root level named
templates
. The location of this folder will beproject_name/templates
- Place all templates here in
projects_name/templates
that you want to access from all the apps.
File:project_name/templates/base.html
-
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/
- [Django]-Get user profile in django
- [Django]-How to move a model between two Django apps (Django 1.7)
- [Django]-How to implement followers/following in Django
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 %}
- [Django]-Django Query Related Field Count
- [Django]-How do you filter a nested serializer in Django Rest Framework?
- [Django]-Should I be adding the Django migration files in the .gitignore file?
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.
- [Django]-How to get the domain name of my site within a Django template?
- [Django]-A field with precision 10, scale 2 must round to an absolute value less than 10^8
- [Django]-Django: FloatField or DecimalField for Currency?
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.
-
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,
-
You might want to name the app template block to something else, not โcontentโ to avoid collisions with other apps.
- [Django]-Iterating over related objects in Django: loop over query set or use one-liner select_related (or prefetch_related)
- [Django]-Adding django admin permissions in a migration: Permission matching query does not exist
- [Django]-How to limit columns returned by Django query?