浏览代码

[enh] better result template handling

Adam Tauber 10 年前
父节点
当前提交
2f9a386c0d

+ 1
- 1
searx/templates/courgette/results.html 查看文件

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

+ 1
- 1
searx/templates/default/results.html 查看文件

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

+ 5
- 1
searx/templates/oscar/results.html 查看文件

17
             {% for result in results %}
17
             {% for result in results %}
18
             <div class="result {% if result['template'] %}result-{{ result.template|replace('.html', '') }}{% else %}result-default{% endif %}">
18
             <div class="result {% if result['template'] %}result-{{ result.template|replace('.html', '') }}{% else %}result-default{% endif %}">
19
                 {% set index = loop.index %}
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
             </div>
25
             </div>
22
             {% endfor %}
26
             {% endfor %}
23
             
27
             

+ 15
- 2
searx/utils.py 查看文件

161
 
161
 
162
 
162
 
163
 def get_static_files(base_path):
163
 def get_static_files(base_path):
164
+    base_path = os.path.join(base_path, 'static')
164
     static_files = set()
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
         for filename in files:
168
         for filename in files:
168
             f = os.path.join(directory[base_path_length:], filename)
169
             f = os.path.join(directory[base_path_length:], filename)
169
             static_files.add(f)
170
             static_files.add(f)
170
     return static_files
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 查看文件

39
 )
39
 )
40
 from searx.utils import (
40
 from searx.utils import (
41
     UnicodeWriter, highlight_content, html_to_text, get_themes,
41
     UnicodeWriter, highlight_content, html_to_text, get_themes,
42
-    get_static_files
42
+    get_static_files, get_result_templates
43
 )
43
 )
44
 from searx.version import VERSION_STRING
44
 from searx.version import VERSION_STRING
45
 from searx.languages import language_codes
45
 from searx.languages import language_codes
58
 
58
 
59
 static_files = get_static_files(searx_dir)
59
 static_files = get_static_files(searx_dir)
60
 
60
 
61
+result_templates = get_result_templates(searx_dir)
62
+
61
 app = Flask(
63
 app = Flask(
62
     __name__,
64
     __name__,
63
     static_folder=static_path,
65
     static_folder=static_path,
125
     return theme_name
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
 def url_for_theme(endpoint, override_theme=None, **values):
137
 def url_for_theme(endpoint, override_theme=None, **values):
129
     if endpoint == 'static' and values.get('filename'):
138
     if endpoint == 'static' and values.get('filename'):
130
         theme_name = get_current_theme_name(override=override_theme)
139
         theme_name = get_current_theme_name(override=override_theme)
180
     # override url_for function in templates
189
     # override url_for function in templates
181
     kwargs['url_for'] = url_for_theme
190
     kwargs['url_for'] = url_for_theme
182
 
191
 
192
+    kwargs['get_result_template'] = get_result_template
193
+
183
     kwargs['theme'] = get_current_theme_name(override=override_theme)
194
     kwargs['theme'] = get_current_theme_name(override=override_theme)
184
 
195
 
185
     kwargs['template_name'] = template_name
196
     kwargs['template_name'] = template_name