Browse Source

[enh] better result template handling

Adam Tauber 10 years ago
parent
commit
2f9a386c0d

+ 1
- 1
searx/templates/courgette/results.html View File

@@ -43,7 +43,7 @@
43 43
 
44 44
     {% for result in results %}
45 45
         {% if result['template'] %}
46
-            {% include 'courgette/result_templates/'+result['template'] %}
46
+            {% include get_result_template('courgette', result['template']) %}
47 47
         {% else %}
48 48
             {% include 'courgette/result_templates/default.html' %}
49 49
         {% endif %}

+ 1
- 1
searx/templates/default/results.html View File

@@ -59,7 +59,7 @@
59 59
 
60 60
     {% for result in results %}
61 61
         {% if result['template'] %}
62
-            {% include 'default/result_templates/'+result['template'] %}
62
+            {% include get_result_template('default', result['template']) %}
63 63
         {% else %}
64 64
             {% include 'default/result_templates/default.html' %}
65 65
         {% endif %}

+ 5
- 1
searx/templates/oscar/results.html View File

@@ -17,7 +17,11 @@
17 17
             {% for result in results %}
18 18
             <div class="result {% if result['template'] %}result-{{ result.template|replace('.html', '') }}{% else %}result-default{% endif %}">
19 19
                 {% set index = loop.index %}
20
-                {% if result.template %}{% include 'oscar/result_templates/'+result['template'] %}{% else %}{% include 'oscar/result_templates/default.html' %}{% endif %}
20
+                {% if result.template %}
21
+                    {% include get_result_template('oscar', result['template']) %}
22
+                {% else %}
23
+                    {% include 'oscar/result_templates/default.html' %}
24
+                {% endif %}
21 25
             </div>
22 26
             {% endfor %}
23 27
             

+ 15
- 2
searx/utils.py View File

@@ -161,10 +161,23 @@ def get_themes(root):
161 161
 
162 162
 
163 163
 def get_static_files(base_path):
164
+    base_path = os.path.join(base_path, 'static')
164 165
     static_files = set()
165
-    base_path_length = len(base_path+'/static') + 1
166
-    for directory, _, files in os.walk(os.path.join(base_path, 'static')):
166
+    base_path_length = len(base_path) + 1
167
+    for directory, _, files in os.walk(base_path):
167 168
         for filename in files:
168 169
             f = os.path.join(directory[base_path_length:], filename)
169 170
             static_files.add(f)
170 171
     return static_files
172
+
173
+
174
+def get_result_templates(base_path):
175
+    base_path = os.path.join(base_path, 'templates')
176
+    result_templates = set()
177
+    base_path_length = len(base_path) + 1
178
+    for directory, _, files in os.walk(base_path):
179
+        if directory.endswith('result_templates'):
180
+            for filename in files:
181
+                f = os.path.join(directory[base_path_length:], filename)
182
+                result_templates.add(f)
183
+    return result_templates

+ 12
- 1
searx/webapp.py View File

@@ -39,7 +39,7 @@ from searx.engines import (
39 39
 )
40 40
 from searx.utils import (
41 41
     UnicodeWriter, highlight_content, html_to_text, get_themes,
42
-    get_static_files
42
+    get_static_files, get_result_templates
43 43
 )
44 44
 from searx.version import VERSION_STRING
45 45
 from searx.languages import language_codes
@@ -58,6 +58,8 @@ default_theme = settings['server'].get('default_theme', 'default')
58 58
 
59 59
 static_files = get_static_files(searx_dir)
60 60
 
61
+result_templates = get_result_templates(searx_dir)
62
+
61 63
 app = Flask(
62 64
     __name__,
63 65
     static_folder=static_path,
@@ -125,6 +127,13 @@ def get_current_theme_name(override=None):
125 127
     return theme_name
126 128
 
127 129
 
130
+def get_result_template(theme, template_name):
131
+    themed_path = theme + '/result_templates/' + template_name
132
+    if themed_path in result_templates:
133
+        return themed_path
134
+    return 'result_templates/' + template_name
135
+
136
+
128 137
 def url_for_theme(endpoint, override_theme=None, **values):
129 138
     if endpoint == 'static' and values.get('filename'):
130 139
         theme_name = get_current_theme_name(override=override_theme)
@@ -180,6 +189,8 @@ def render(template_name, override_theme=None, **kwargs):
180 189
     # override url_for function in templates
181 190
     kwargs['url_for'] = url_for_theme
182 191
 
192
+    kwargs['get_result_template'] = get_result_template
193
+
183 194
     kwargs['theme'] = get_current_theme_name(override=override_theme)
184 195
 
185 196
     kwargs['template_name'] = template_name