diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 55 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 3 | ||||
-rw-r--r-- | ishtar_common/utils_secretary.py | 5 |
3 files changed, 38 insertions, 25 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 1febb4664..89bee27cd 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -176,26 +176,17 @@ class ValueGetter(object): continue if field_name in self.GET_VALUES_EXCLUDE_FIELDS: continue + if hasattr(value, 'get_values'): + new_prefix = prefix + field_name + '_' + values.update( + value.get_values(new_prefix, filtr=filtr, **kwargs)) if filtr and prefix + field_name not in filtr: - if hasattr(value, 'get_values'): - new_prefix = prefix + field_name + '_' - new_filtr = self._get_values_update_sub_filter(filtr, - new_prefix) - values.update( - value.get_values(new_prefix, filtr=new_filtr, **kwargs)) continue if hasattr(self, "get_values_for_" + field_name): values[prefix + field_name] = getattr( self, "get_values_for_" + field_name)() else: - if hasattr(value, 'get_values'): - new_prefix = prefix + field_name + '_' - new_filtr = self._get_values_update_sub_filter(filtr, - new_prefix) - values.update( - value.get_values(new_prefix, filtr=new_filtr, **kwargs)) - else: - values[prefix + field_name] = value + values[prefix + field_name] = value values.update(self._get_values_documents(prefix=prefix, filtr=filtr)) for extra_field in self.GET_VALUES_EXTRA: values[prefix + extra_field] = getattr(self, extra_field) or '' @@ -223,11 +214,12 @@ class ValueGetter(object): value_list.append((key, str(values[key]))) for global_var in GlobalVar.objects.all(): values[global_var.slug] = global_var.value or "" - values['VALUES'] = json.dumps( - values, indent=4, sort_keys=True, - skipkeys=True, ensure_ascii=False, - separators=("", " : "), - ).replace(" " * 4, "\t") + if not filtr or 'VALUES' in filtr: + values['VALUES'] = json.dumps( + values, indent=4, sort_keys=True, + skipkeys=True, ensure_ascii=False, + separators=("", " : "), + ).replace(" " * 4, "\t") return values @@ -1496,7 +1488,18 @@ class DocumentTemplate(models.Model): key = s.groups()[0] if key not in filtr: filtr.append(key) - return filtr + new_filter = [] + for fil in filtr: + keys = fil.split('.') + prefix = "" + for k in keys: + if prefix: + prefix += '_' + if prefix + k in new_filter: + continue + new_filter.append(prefix + k) + prefix += k + return new_filter def publish_labels(self, objects): if not objects: @@ -1509,12 +1512,18 @@ class DocumentTemplate(models.Model): len_objects = len(objects) names = [] + item_re = r"items\.\d\.([A-Za-z0-9_.]*)(?:\|[^}]+)*" filtr = self.get_filter( self.template, - # e.g.: {{items.4.key}} - [r'{{ *items\.\d\.([A-Za-z0-9_.]*)(\|[A-Za-z0-9_.-]*)* *}}'] + [ + # {{items.4.key}} + r'{{ *' + item_re + r' *}}', + # {% if items.42.other_key %} + r'{% *if ' + item_re + r' *%}', + # {% for item in items.42.another_keys %} + r'{% *for +[A-Za-z0-9_]+ +in +' + item_re + r' *%}', + ] ) - for idx in range(int(len(objects) / self.label_per_page) + 1): if idx * self.label_per_page >= len_objects: break diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 98d435ce9..903d1d970 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -1745,7 +1745,8 @@ class Town(Imported, models.Model): 'year': self.year or ""} return values - def get_values(self, prefix='', no_values=False, no_base_finds=True): + def get_values(self, prefix='', no_values=False, filtr=None, + no_base_finds=True): return { prefix or "label": str(self), prefix + "name": self.name, diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index 7a4e930d8..a89e4b6a0 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -43,7 +43,10 @@ def human_date_filter(value): def splitpart(value, index, char=','): if not value or not index: return "" - return value.split(char)[index] + splited = value.split(char) + if len(splited) > index: + return splited[index] + return "" class IshtarSecretaryRenderer(Renderer): |