менил логику сохранения дефолтного описания событий

remotes/origin/HEAD
Slava Kyrachevsky 9 years ago
parent a264fd12b1
commit d34d38cc0f
  1. 23
      apps/conference/views.py
  2. 24
      apps/exposition/views.py
  3. 29
      apps/settings/admin.py
  4. 10
      apps/settings/admin_urls.py
  5. 54
      apps/settings/forms.py
  6. 97
      apps/settings/migrations/0002_auto__add_eventdefaultdescriptiontranslation__add_unique_eventdefaultd.py
  7. 16
      apps/settings/models.py
  8. 6
      proj/settings.py
  9. 2
      requirements.txt
  10. 64
      templates/c_admin/settings/default_description.html
  11. 0
      templates/client/includes/conference/default_description_en.html
  12. 0
      templates/client/includes/conference/default_description_ru.html
  13. 0
      templates/client/includes/exposition/default_description_en.html
  14. 0
      templates/client/includes/exposition/default_description_ru.html

@ -41,9 +41,9 @@ from stats_collector.mixin import (
) )
from theme.models import Tag, Theme from theme.models import Tag, Theme
from events.mixin import ConfFilterMixin from events.mixin import ConfFilterMixin
from settings.models import EventDefaultDescription
MONTHES = settings.MONTHES MONTHES = settings.MONTHES
description_templates = settings.DEFAULT_DESCRIPTION
class ConferenceBy(ConfFilterMixin, ConfSectionMixin, JitterCacheMixin, MetadataMixin, ListView): class ConferenceBy(ConfFilterMixin, ConfSectionMixin, JitterCacheMixin, MetadataMixin, ListView):
@ -438,14 +438,19 @@ class ConferenceDetail(ObjectStatMixin, CommentMixin, JitterCacheMixin, Metadata
model = Conference model = Conference
slug_field = 'url' slug_field = 'url'
template_name = 'client/conference/conference_detail.html' template_name = 'client/conference/conference_detail.html'
descriptions = { descriptions = {}
'ru': render_to_string( try:
settings.DEFAULT_DESCRIPTION.get('c_description_ru') descriptions.update(
), {'ru': EventDefaultDescription.objects.language('ru').all()[0].conf_description}
'en': render_to_string( )
settings.DEFAULT_DESCRIPTION.get('c_description_en') except IndexError:
), pass
} try:
descriptions.update(
{'en': EventDefaultDescription.objects.language('en').all()[0].conf_description}
)
except IndexError:
pass
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):

@ -40,8 +40,7 @@ from stats_collector.mixin import (
) )
from theme.models import Tag, Theme from theme.models import Tag, Theme
from events.mixin import ExpoFilterMixin, SearchFilterMixin from events.mixin import ExpoFilterMixin, SearchFilterMixin
from settings.models import EventDefaultDescription
description_templates = settings.DEFAULT_DESCRIPTION
class ExpositionBy(ExpoFilterMixin, ExpoSectionMixin, JitterCacheMixin, MetadataMixin, ListView): class ExpositionBy(ExpoFilterMixin, ExpoSectionMixin, JitterCacheMixin, MetadataMixin, ListView):
@ -186,14 +185,19 @@ class ExpoDetail(ObjectStatMixin, JitterCacheMixin, MetadataMixin, DetailView):
queryset = Exposition.objects.language()\ queryset = Exposition.objects.language()\
.select_related('place', 'city', 'country', 'paid_new')\ .select_related('place', 'city', 'country', 'paid_new')\
.prefetch_related('theme', 'tag') .prefetch_related('theme', 'tag')
descriptions = { descriptions = {}
'ru': render_to_string( try:
settings.DEFAULT_DESCRIPTION.get('e_description_ru') descriptions.update(
), {'ru': EventDefaultDescription.objects.language('ru').all()[0].expo_description}
'en': render_to_string( )
settings.DEFAULT_DESCRIPTION.get('e_description_en') except IndexError:
), pass
} try:
descriptions.update(
{'en': EventDefaultDescription.objects.language('en').all()[0].expo_description}
)
except IndexError:
pass
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
lang = translation.get_language() lang = translation.get_language()

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json
from django.shortcuts import render_to_response from django.shortcuts import render_to_response, redirect
from django.views.generic import FormView from django.views.generic import FormView, UpdateView
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.core.context_processors import csrf from django.core.context_processors import csrf
@ -15,6 +15,9 @@ from .forms import MainPageNews
from .forms import MainPageThemes from .forms import MainPageThemes
from .forms import EventSectionSettingsForm from .forms import EventSectionSettingsForm
from .forms import EventDefaultDescriptionEditForm from .forms import EventDefaultDescriptionEditForm
from .models import EventDefaultDescription
from hvad.views import TranslatableModelFormMixin
def handle_form(request, form): def handle_form(request, form):
@ -100,11 +103,27 @@ class EventSectionSettings(ContextMixin, FormView):
return super(EventSectionSettings, self).form_valid(form) return super(EventSectionSettings, self).form_valid(form)
class EventDefaultDescription(ContextMixin, FormView): class EventDefaultDescriptionView(ContextMixin, FormView):
form_class = EventDefaultDescriptionEditForm form_class = EventDefaultDescriptionEditForm
template_name = 'c_admin/settings/default_description.html' template_name = 'c_admin/settings/default_description.html'
success_url = reverse_lazy('settings_default_description') success_url = reverse_lazy('settings_default_description')
def get_object(self):
try:
return EventDefaultDescription.objects.language().all()[0]
except IndexError:
return None
def get_initial(self):
data = super(EventDefaultDescriptionView, self).get_initial()
self.object = self.get_object()
if self.object is not None and self.request.method != 'POST':
for code, name in settings.LANGUAGES:
obj = EventDefaultDescription._meta.translations_model.objects.get(language_code=code, master_id=self.object.pk)
data['expo_description_%s' % code] = obj.expo_description
data['conf_description_%s' % code] = obj.conf_description
return data
def form_valid(self, form): def form_valid(self, form):
form.save() form.save(obj=self.get_object())
return super(EventDefaultDescription, self).form_valid(form) return redirect(self.get_success_url())

@ -1,20 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, url
from .admin import handle_themes from .admin import handle_themes
from .admin import handle_news from .admin import handle_news
from .admin import handle_articles from .admin import handle_articles
from .admin import main_page from .admin import main_page
from .admin import EventSectionSettings from .admin import EventSectionSettings
from .admin import EventDefaultDescription from .admin import EventDefaultDescriptionView
urlpatterns = patterns('', urlpatterns = patterns(
'',
url(r'^main-page/themes/', handle_themes, name='settings_main_page_themes'), url(r'^main-page/themes/', handle_themes, name='settings_main_page_themes'),
url(r'^main-page/news/$', handle_news, name='settings_main_page_news'), url(r'^main-page/news/$', handle_news, name='settings_main_page_news'),
url(r'^main-page/blogs/$', handle_articles, name='settings_main_page_articles'), url(r'^main-page/blogs/$', handle_articles, name='settings_main_page_articles'),
url(r'^main-page/$', main_page, name='settings_main_page'), url(r'^main-page/$', main_page, name='settings_main_page'),
url(r'^sections/$', EventSectionSettings.as_view(), name='settings_sections'), url(r'^sections/$', EventSectionSettings.as_view(), name='settings_sections'),
url(r'^description/$', EventDefaultDescription.as_view(), name='settings_default_description'), url(r'^description/$', EventDefaultDescriptionView.as_view(), name='settings_default_description'),
) )

@ -1,7 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os
import json import json
from itertools import chain
from django import forms from django import forms
from django.core.exceptions import ( from django.core.exceptions import (
@ -11,10 +9,9 @@ from django.core.exceptions import (
) )
from django.db.models import Q from django.db.models import Q
from django.utils.encoding import force_text from django.utils.encoding import force_text
# from django.utils.html import format_html
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse
from django.core.cache import cache from django.core.cache import cache
from functions.forms import ( from functions.forms import (
@ -22,6 +19,7 @@ from functions.forms import (
ExpoTranslatableModelForm_, ExpoTranslatableModelForm_,
ML_ModelMultipleChoiceField ML_ModelMultipleChoiceField
) )
from functions.translate import fill_trans_fields_all
from theme.models import Theme from theme.models import Theme
from article.models import Article from article.models import Article
@ -29,7 +27,9 @@ from ckeditor.widgets import CKEditorWidget
from city.models import City from city.models import City
from country.models import Country from country.models import Country
from .models import Html, LandingComment, ParticipationComment from .models import (
Html, LandingComment, ParticipationComment, EventDefaultDescription
)
class HtmlForm(ExpoTranslatableModelForm): class HtmlForm(ExpoTranslatableModelForm):
@ -174,30 +174,30 @@ class EventSectionSettingsForm(forms.Form):
class EventDefaultDescriptionEditForm(forms.Form): class EventDefaultDescriptionEditForm(forms.Form):
e_description_ru = forms.CharField(label=_(u'Описание для выставки'), required=False, widget=CKEditorWidget)
e_description_en = forms.CharField(label=_(u'Описание для выставки'), required=False, widget=CKEditorWidget)
c_description_ru = forms.CharField(label=_(u'Описание для конференции'), required=False, widget=CKEditorWidget)
c_description_en = forms.CharField(label=_(u'Описание для конференции'), required=False, widget=CKEditorWidget)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(EventDefaultDescriptionEditForm, self).__init__(*args, **kwargs) super(EventDefaultDescriptionEditForm, self).__init__(*args, **kwargs)
templates = settings.DEFAULT_DESCRIPTION
for field_name, path in templates.iteritems():
try:
with open(os.path.join(settings.SITE_ROOT, 'templates', path), 'r') as f:
self.initial[field_name] = f.read()
except Exception as e:
print(e)
# except: for lid, (code, name) in enumerate(settings.LANGUAGES):
# pass self.fields['expo_description_%s' % code] = forms.CharField(
label=_(u'Описание для выставки'),
required=False,
widget=CKEditorWidget
)
self.fields['conf_description_%s' % code] = forms.CharField(
label=_(u'Описание для конференции'),
required=False,
widget=CKEditorWidget
)
def save(self): def save(self, obj=None):
templates = settings.DEFAULT_DESCRIPTION if obj is None:
for field_name, path in templates.iteritems(): obj = EventDefaultDescription()
try: id = None
with open(os.path.join(settings.SITE_ROOT, 'templates', path), 'w+') as f: else:
f.write(self.cleaned_data.get(field_name).encode('utf-8')) id = obj.id
except Exception as e:
print(e) data = self.cleaned_data
# pass
fill_trans_fields_all(EventDefaultDescription, obj, data, id)
return obj

@ -0,0 +1,97 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'EventDefaultDescriptionTranslation'
db.create_table(u'settings_eventdefaultdescription_translation', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('expo_description', self.gf('django.db.models.fields.TextField')()),
('conf_description', self.gf('django.db.models.fields.TextField')()),
('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['settings.EventDefaultDescription'])),
))
db.send_create_signal(u'settings', ['EventDefaultDescriptionTranslation'])
# Adding unique constraint on 'EventDefaultDescriptionTranslation', fields ['language_code', 'master']
db.create_unique(u'settings_eventdefaultdescription_translation', ['language_code', 'master_id'])
# Adding model 'EventDefaultDescription'
db.create_table(u'settings_eventdefaultdescription', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal(u'settings', ['EventDefaultDescription'])
def backwards(self, orm):
# Removing unique constraint on 'EventDefaultDescriptionTranslation', fields ['language_code', 'master']
db.delete_unique(u'settings_eventdefaultdescription_translation', ['language_code', 'master_id'])
# Deleting model 'EventDefaultDescriptionTranslation'
db.delete_table(u'settings_eventdefaultdescription_translation')
# Deleting model 'EventDefaultDescription'
db.delete_table(u'settings_eventdefaultdescription')
models = {
u'settings.eventdefaultdescription': {
'Meta': {'unique_together': '()', 'object_name': 'EventDefaultDescription', 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'settings.eventdefaultdescriptiontranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'EventDefaultDescriptionTranslation', 'db_table': "u'settings_eventdefaultdescription_translation'", 'index_together': '()'},
'conf_description': ('django.db.models.fields.TextField', [], {}),
'expo_description': ('django.db.models.fields.TextField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['settings.EventDefaultDescription']"})
},
u'settings.html': {
'Meta': {'unique_together': '()', 'object_name': 'Html', 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
},
u'settings.htmltranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'HtmlTranslation', 'db_table': "u'settings_html_translation'", 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['settings.Html']"}),
'text': ('django.db.models.fields.TextField', [], {})
},
u'settings.landingcomment': {
'Meta': {'unique_together': '()', 'object_name': 'LandingComment', 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255'})
},
u'settings.landingcommenttranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'LandingCommentTranslation', 'db_table': "u'settings_landingcomment_translation'", 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['settings.LandingComment']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'position': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'text': ('django.db.models.fields.TextField', [], {})
},
u'settings.participationcomment': {
'Meta': {'unique_together': '()', 'object_name': 'ParticipationComment', 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255'})
},
u'settings.participationcommenttranslation': {
'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'ParticipationCommentTranslation', 'db_table': "u'settings_participationcomment_translation'", 'index_together': '()'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['settings.ParticipationComment']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'position': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'text': ('django.db.models.fields.TextField', [], {})
}
}
complete_apps = ['settings']

@ -72,3 +72,19 @@ class ParticipationComment(TranslatableModel):
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', self.pk) return self.lazy_translation_getter('name', self.pk)
class EventDefaultDescription(TranslatableModel):
translations = TranslatedFields(
expo_description=models.TextField(
_(u'Описание для выставки'),
blank=True
),
conf_description=models.TextField(
_(u'Описание для конференции'),
blank=True
)
)
def __unicode__(self):
return str(self.pk)

@ -486,12 +486,6 @@ C_CITY_CATALOG_KEY = 'conf_city_catalog'
C_COUNTRY_CATALOG_KEY = 'conf_country_catalog' C_COUNTRY_CATALOG_KEY = 'conf_country_catalog'
E_CITY_CATALOG_KEY = 'expo_city_catalog' E_CITY_CATALOG_KEY = 'expo_city_catalog'
E_COUNTRY_CATALOG_KEY = 'expo_country_catalog' E_COUNTRY_CATALOG_KEY = 'expo_country_catalog'
DEFAULT_DESCRIPTION = {
'e_description_ru': 'client/includes/conference/default_description_ru.html',
'e_description_en': 'client/includes/conference/default_description_en.html',
'c_description_ru': 'client/includes/exposition/default_description_ru.html',
'c_description_en': 'client/includes/exposition/default_description_en.html',
}
PERIODIC = { PERIODIC = {
0: '', 0: '',
1: _(u'Ежегодно'), 1: _(u'Ежегодно'),

@ -12,7 +12,7 @@ django-ckeditor==4.0.2
django-crontab==0.6.0 django-crontab==0.6.0
django-debug-toolbar==1.2.1 django-debug-toolbar==1.2.1
django-haystack==2.3.2 django-haystack==2.3.2
django-hvad==1.2.0 django-hvad==1.2.2
django-model-utils==2.2 django-model-utils==2.2
django-modeltranslation==0.12 django-modeltranslation==0.12
django-recaptcha==1.2.1 django-recaptcha==1.2.1

@ -34,10 +34,10 @@
<div class="controls span3" id="m_e"> <div class="controls span3" id="m_e">
<ul class="nav nav-tabs" style="margin-bottom: -2px; margin-left: 10px;"> <ul class="nav nav-tabs" style="margin-bottom: -2px; margin-left: 10px;">
<li class="active"> <li class="active">
<a href="#field_{{ form.e_description_ru.auto_id }}" data-toggle="tab">ru</a> <a href="#field_{{ form.expo_description_ru.auto_id }}" data-toggle="tab">ru</a>
</li> </li>
<li> <li>
<a href="#field_{{ form.e_description_en.auto_id }}" data-toggle="tab">en</a> <a href="#field_{{ form.expo_description_en.auto_id }}" data-toggle="tab">en</a>
</li> </li>
</ul> </ul>
</div> </div>
@ -45,35 +45,35 @@
<div class="tab-content" > <div class="tab-content" >
{# expo ru #} {# expo ru #}
<div class="tab-pane active" id="field_{{ form.e_description_ru.auto_id }}"> <div class="tab-pane active" id="field_{{ form.expo_description_ru.auto_id }}">
<div class="control-group {% if form.e_description_ru.errors %}error{% endif %}" > <div class="control-group {% if form.expo_description_ru.errors %}error{% endif %}" >
<label class="control-label"> <label class="control-label">
{% if form.e_description_ru.required %} {% if form.expo_description_ru.required %}
<b>{{ form.e_description_ru.label }}</b>: <b>{{ form.expo_description_ru.label }}</b>:
{% else %} {% else %}
{{ form.e_description_ru.label }}: {{ form.expo_description_ru.label }}:
{% endif %} {% endif %}
</label> </label>
<div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px"> <div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px">
{{ form.e_description_ru }} {{ form.expo_description_ru }}
<span class="help-inline">{{ form.e_description_ru.errors }}</span> <span class="help-inline">{{ form.expo_description_ru.errors }}</span>
</div> </div>
</div> </div>
</div> </div>
{# expo en #} {# expo en #}
<div class="tab-pane" id="field_{{ form.e_description_en.auto_id }}"> <div class="tab-pane" id="field_{{ form.expo_description_en.auto_id }}">
<div class="control-group {% if form.e_description_en.errors %}error{% endif %}" > <div class="control-group {% if form.expo_description_en.errors %}error{% endif %}" >
<label class="control-label"> <label class="control-label">
{% if form.e_description_en.required %} {% if form.expo_description_en.required %}
<b>{{ form.e_description_en.label }}</b>: <b>{{ form.expo_description_en.label }}</b>:
{% else %} {% else %}
{{ form.e_description_en.label }}: {{ form.expo_description_en.label }}:
{% endif %} {% endif %}
</label> </label>
<div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px"> <div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px">
{{ form.e_description_en }} {{ form.expo_description_en }}
<span class="help-inline"> {{ form.e_description_en.errors }}</span></div> <span class="help-inline"> {{ form.expo_description_en.errors }}</span></div>
</div> </div>
</div> </div>
</div> </div>
@ -83,44 +83,44 @@
<div class="controls span3" id="m_c"> <div class="controls span3" id="m_c">
<ul class="nav nav-tabs" style="margin-bottom: -2px; margin-left: 10px;"> <ul class="nav nav-tabs" style="margin-bottom: -2px; margin-left: 10px;">
<li class="active"> <li class="active">
<a href="#field_{{ form.c_description_ru.auto_id }}" data-toggle="tab">ru</a> <a href="#field_{{ form.conf_description_ru.auto_id }}" data-toggle="tab">ru</a>
</li> </li>
<li> <li>
<a href="#field_{{ form.c_description_en.auto_id }}" data-toggle="tab">en</a> <a href="#field_{{ form.conf_description_en.auto_id }}" data-toggle="tab">en</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="tab-content" > <div class="tab-content" >
{# conf ru #} {# conf ru #}
<div class="tab-pane active" id="field_{{ form.c_description_ru.auto_id }}"> <div class="tab-pane active" id="field_{{ form.conf_description_ru.auto_id }}">
<div class="control-group {% if form.c_description_ru.errors %}error{% endif %}" > <div class="control-group {% if form.conf_description_ru.errors %}error{% endif %}" >
<label class="control-label"> <label class="control-label">
{% if form.c_description_ru.required %} {% if form.conf_description_ru.required %}
<b>{{ form.c_description_ru.label }}</b>: <b>{{ form.conf_description_ru.label }}</b>:
{% else %} {% else %}
{{ form.c_description_ru.label }}: {{ form.conf_description_ru.label }}:
{% endif %} {% endif %}
</label> </label>
<div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px"> <div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px">
{{ form.c_description_ru }} {{ form.conf_description_ru }}
<span class="help-inline">{{ form.c_description_ru.errors }}</span></div> <span class="help-inline">{{ form.conf_description_ru.errors }}</span></div>
</div> </div>
</div> </div>
{# conf en #} {# conf en #}
<div class="tab-pane" id="field_{{ form.c_description_en.auto_id }}"> <div class="tab-pane" id="field_{{ form.conf_description_en.auto_id }}">
<div class="control-group {% if form.c_description_en.errors %}error{% endif %}" > <div class="control-group {% if form.conf_description_en.errors %}error{% endif %}" >
<label class="control-label"> <label class="control-label">
{% if form.c_description_en.required %} {% if form.conf_description_en.required %}
<b>{{ form.c_description_en.label }}</b>: <b>{{ form.conf_description_en.label }}</b>:
{% else %} {% else %}
{{ form.c_description_en.label }}: {{ form.conf_description_en.label }}:
{% endif %} {% endif %}
</label> </label>
<div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px"> <div class="controls" style="border: 1px solid #ddd; padding: 10px; border-radius: 5px">
{{ form.c_description_en }} {{ form.conf_description_en }}
<span class="help-inline"> {{ form.c_description_en.errors }}</span></div> <span class="help-inline"> {{ form.conf_description_en.errors }}</span></div>
</div> </div>
</div> </div>
</div> </div>

Loading…
Cancel
Save