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 jus
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
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.
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.
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 %}
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.
project_name/project_name/settings.py and find the TEMPLATES array'DIRS' : [] to 'DIRS': [os.path.join(BASE_DIR, 'templates')]templates. The location of this folder will be project_name/templatesprojects_name/templates that you want to access from all the apps. project_name/templates/base.htmlExtend 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/