mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 03:56:43 +00:00
Rename plugin.loader to plugin.template
- Add helper function for rendering a template
This commit is contained in:
parent
44c4e88646
commit
103921f5c4
@ -343,7 +343,7 @@ TEMPLATES = [
|
|||||||
],
|
],
|
||||||
'loaders': [(
|
'loaders': [(
|
||||||
'django.template.loaders.cached.Loader', [
|
'django.template.loaders.cached.Loader', [
|
||||||
'plugin.loader.PluginTemplateLoader',
|
'plugin.template.PluginTemplateLoader',
|
||||||
'django.template.loaders.filesystem.Loader',
|
'django.template.loaders.filesystem.Loader',
|
||||||
'django.template.loaders.app_directories.Loader',
|
'django.template.loaders.app_directories.Loader',
|
||||||
])
|
])
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
"""
|
|
||||||
load templates for loaded plugins
|
|
||||||
"""
|
|
||||||
from django.template.loaders.filesystem import Loader as FilesystemLoader
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from plugin import registry
|
|
||||||
|
|
||||||
|
|
||||||
class PluginTemplateLoader(FilesystemLoader):
|
|
||||||
|
|
||||||
def get_dirs(self):
|
|
||||||
dirname = 'templates'
|
|
||||||
template_dirs = []
|
|
||||||
for plugin in registry.plugins.values():
|
|
||||||
new_path = Path(plugin.path) / dirname
|
|
||||||
if Path(new_path).is_dir():
|
|
||||||
template_dirs.append(new_path) # pragma: no cover
|
|
||||||
return tuple(template_dirs)
|
|
66
InvenTree/plugin/template.py
Normal file
66
InvenTree/plugin/template.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
"""
|
||||||
|
load templates for loaded plugins
|
||||||
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
from django.template.loaders.filesystem import Loader as FilesystemLoader
|
||||||
|
|
||||||
|
from plugin import registry
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
|
|
||||||
|
class PluginTemplateLoader(FilesystemLoader):
|
||||||
|
"""
|
||||||
|
A custom template loader which allows loading of templates from installed plugins.
|
||||||
|
|
||||||
|
Each plugin can register templates simply by providing a 'templates' directory in its root path.
|
||||||
|
|
||||||
|
The convention is that each 'templates' directory contains a subdirectory with the same name as the plugin,
|
||||||
|
e.g. templates/myplugin/my_template.html
|
||||||
|
|
||||||
|
In this case, the template can then be loaded (from any plugin!) by loading "myplugin/my_template.html".
|
||||||
|
|
||||||
|
The separate plugin-named directories help keep the templates separated and uniquely identifiable.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_dirs(self):
|
||||||
|
dirname = 'templates'
|
||||||
|
template_dirs = []
|
||||||
|
|
||||||
|
for plugin in registry.plugins.values():
|
||||||
|
new_path = Path(plugin.path) / dirname
|
||||||
|
if Path(new_path).is_dir():
|
||||||
|
template_dirs.append(new_path) # pragma: no cover
|
||||||
|
|
||||||
|
return tuple(template_dirs)
|
||||||
|
|
||||||
|
|
||||||
|
def render_template(plugin, template_file, context=None):
|
||||||
|
"""
|
||||||
|
Locate and render a template file, available in the global template context.
|
||||||
|
"""
|
||||||
|
|
||||||
|
print("render_template", "->", template_file)
|
||||||
|
print("Context:")
|
||||||
|
print(context)
|
||||||
|
|
||||||
|
try:
|
||||||
|
tmp = template.loader.get_template(template_file)
|
||||||
|
except template.TemplateDoesNotExist:
|
||||||
|
logger.error(f"Plugin {plugin.slug} could not locate template '{template_file}'")
|
||||||
|
|
||||||
|
return f"""
|
||||||
|
<div class='alert alert-block alert-danger'>
|
||||||
|
Template file <em>{template_file}</em> does not exist.
|
||||||
|
</div>
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Render with the provided context
|
||||||
|
html = tmp.render(context)
|
||||||
|
|
||||||
|
return html
|
Loading…
x
Reference in New Issue
Block a user