mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +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': [(
|
||||
'django.template.loaders.cached.Loader', [
|
||||
'plugin.loader.PluginTemplateLoader',
|
||||
'plugin.template.PluginTemplateLoader',
|
||||
'django.template.loaders.filesystem.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…
Reference in New Issue
Block a user