parent
1b25c9c6a6
commit
8479cc2ba1
14 changed files with 329 additions and 41 deletions
@ -0,0 +1,68 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.shortcuts import render_to_response |
||||||
|
from django.http import HttpResponseRedirect, HttpResponse |
||||||
|
from django.core.context_processors import csrf |
||||||
|
from django.conf import settings |
||||||
|
from django.forms.formsets import BaseFormSet, formset_factory |
||||||
|
from django.forms.models import modelformset_factory |
||||||
|
from django.contrib.contenttypes.models import ContentType |
||||||
|
from django.contrib.auth.decorators import login_required |
||||||
|
#models and forms |
||||||
|
from models import MetaSetting |
||||||
|
from forms import MetaForm, MetaFilterForm |
||||||
|
from theme.models import Tag |
||||||
|
from city.models import City |
||||||
|
from file.models import FileModel, TmpFile |
||||||
|
from file.forms import FileModelForm, FileForm |
||||||
|
from photologue.forms import PhotoForm |
||||||
|
#python |
||||||
|
import random |
||||||
|
#custom views |
||||||
|
from functions.custom_views import objects_list, delete_object |
||||||
|
from functions.views_help import get_referer |
||||||
|
|
||||||
|
from functions.admin_views import AdminListView, AdminView, upload_photo |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MetaListView(AdminListView): |
||||||
|
template_name = 'admin/meta/meta_list.html' |
||||||
|
form_class = MetaFilterForm |
||||||
|
model = MetaSetting |
||||||
|
|
||||||
|
class MetaView(AdminView): |
||||||
|
form_class = MetaForm |
||||||
|
model = MetaSetting |
||||||
|
success_url = '/admin/meta/all/' |
||||||
|
template_name = 'admin/meta/meta_setting.html' |
||||||
|
|
||||||
|
def form_valid(self, form): |
||||||
|
self.set_obj() |
||||||
|
expo = form.save(obj=self.obj) |
||||||
|
|
||||||
|
return HttpResponseRedirect(self.success_url) |
||||||
|
|
||||||
|
def get_form(self, form_class): |
||||||
|
if self.request.POST: |
||||||
|
return super(MetaView, self).get_form(form_class) |
||||||
|
obj = self.set_obj() |
||||||
|
if obj: |
||||||
|
data = {'name':obj.name} |
||||||
|
|
||||||
|
for code, name in settings.LANGUAGES: |
||||||
|
trans_obj = self.model._meta.translations_model.objects.get(language_code = code,master__id=obj.id) #access to translated fields |
||||||
|
data['title_%s' % code] = trans_obj.title |
||||||
|
data['description_%s' % code] = trans_obj.description |
||||||
|
data['keywords_%s' % code] = trans_obj.keywords |
||||||
|
data['h1_%s' % code] = trans_obj.h1 |
||||||
|
|
||||||
|
form =form_class(initial=data) |
||||||
|
return form |
||||||
|
else: |
||||||
|
return form_class() |
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs): |
||||||
|
context = super(MetaView, self).get_context_data(**kwargs) |
||||||
|
obj = self.set_obj() |
||||||
|
return context |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.conf.urls import patterns, include, url |
||||||
|
from admin import MetaListView, MetaView |
||||||
|
|
||||||
|
urlpatterns = patterns('conference.admin', |
||||||
|
|
||||||
|
url(r'^all/$', MetaListView.as_view()), |
||||||
|
#url(r'^change/(?P<url>.*)/$', 'conference_change'), |
||||||
|
url(r'^(?P<id>.*)/$', MetaView.as_view()), |
||||||
|
url(r'^$', MetaView.as_view()), |
||||||
|
) |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
from meta.views import Meta |
||||||
|
|
||||||
|
def add_meta(view): |
||||||
|
def wrapper(request, *args, **kwargs): |
||||||
|
""" |
||||||
|
meta = Meta( |
||||||
|
title=title, |
||||||
|
description=description, |
||||||
|
keywords=keywords, |
||||||
|
meta_extras = { |
||||||
|
'viewport': 'width=device-width, initial-scale=1.0, minimum-scale=1.0' |
||||||
|
} |
||||||
|
'extra_custom_props': [ |
||||||
|
('http-equiv', 'Content-Type', 'text/html; charset=UTF-8'), |
||||||
|
] |
||||||
|
) |
||||||
|
""" |
||||||
|
|
||||||
|
|
||||||
|
r = view(request, *args, **kwargs) |
||||||
|
r.context_data = {'foo': 'bar'} |
||||||
|
return r.render() |
||||||
|
return wrapper |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django import forms |
||||||
|
from django.conf import settings |
||||||
|
from models import MetaSetting |
||||||
|
from functions.translate import fill_with_signal |
||||||
|
from functions.admin_forms import AdminFilterForm |
||||||
|
|
||||||
|
|
||||||
|
class MetaForm(forms.Form): |
||||||
|
name = forms.CharField(label=u'Название страницы') |
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs): |
||||||
|
""" |
||||||
|
create dynamical translated fields fields |
||||||
|
""" |
||||||
|
super(MetaForm, self).__init__(*args, **kwargs) |
||||||
|
#creates translated forms example: name_ru, name_en |
||||||
|
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs |
||||||
|
if len(settings.LANGUAGES) in range(10): |
||||||
|
for lid, (code, name) in enumerate(settings.LANGUAGES): |
||||||
|
# uses enumerate for detect iteration number |
||||||
|
# first iteration is a default lang so it required fields |
||||||
|
required = True if lid == 0 else False |
||||||
|
self.fields['title_%s' % code] = forms.CharField(label=u'Title', required=required, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
self.fields['description_%s' % code] = forms.CharField(label=u'Description', required=required, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
self.fields['keywords_%s' % code] = forms.CharField(label=u'Keywords', required=False, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
self.fields['h1_%s' % code] = forms.CharField(label=u'H1', required=False, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
|
||||||
|
def save(self, obj=None): |
||||||
|
data = self.cleaned_data |
||||||
|
if not obj: |
||||||
|
meta = MetaSetting() |
||||||
|
else: |
||||||
|
meta = obj |
||||||
|
|
||||||
|
meta.name = data['name'] |
||||||
|
|
||||||
|
|
||||||
|
# fill translated fields and save object |
||||||
|
fill_with_signal(MetaSetting, meta, data) |
||||||
|
meta.save() |
||||||
|
|
||||||
|
class MetaFilterForm(AdminFilterForm): |
||||||
|
model = MetaSetting |
||||||
@ -0,0 +1,57 @@ |
|||||||
|
{% extends 'admin_list.html' %} |
||||||
|
{% load static %} |
||||||
|
|
||||||
|
{% block body %} |
||||||
|
|
||||||
|
<div class="box span8"> |
||||||
|
<div class="box-header well"> |
||||||
|
<h2><i class="icon-arrow-down"></i>Фильтры</h2> |
||||||
|
</div> |
||||||
|
<div class="box-content"> |
||||||
|
<form> |
||||||
|
{{ form }} |
||||||
|
|
||||||
|
<button type="submit" class="btn">Найти</button> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="box span8"> |
||||||
|
<div class="box-header well"> |
||||||
|
<h2><i class="icon-arrow-down"></i>Список мета настроек</h2> |
||||||
|
</div> |
||||||
|
<div class="box-content"> |
||||||
|
|
||||||
|
<table class="table table-hover"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Страница</th> |
||||||
|
<th> </th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{% for item in object_list %} |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td>{{ item.name }}</td> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td class="center sorting_1"> |
||||||
|
<a class="btn-small btn-info" href="/admin/meta/{{ item.id }}"> |
||||||
|
Изменить |
||||||
|
</a> |
||||||
|
</td> |
||||||
|
|
||||||
|
</tr> |
||||||
|
|
||||||
|
{% endfor %} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
<a class="btn btn-success" href="/admin/meta/"><i class="icon-plus-sign icon-white"></i> Добавить настройку</a> |
||||||
|
</div> |
||||||
|
{# pagination #} |
||||||
|
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} |
||||||
|
</div> |
||||||
|
{% endblock %} |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
{% extends 'base.html' %} |
||||||
|
{% load static %} |
||||||
|
{# Displays article form #} |
||||||
|
|
||||||
|
{% block scripts %} |
||||||
|
|
||||||
|
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> |
||||||
|
{# selects #} |
||||||
|
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> |
||||||
|
<script src="{% static 'js/select/select2.js' %}"></script> |
||||||
|
<script src="{% static 'custom_js/make_select.js' %}"></script> |
||||||
|
{# ajax #} |
||||||
|
<script src="{% static 'custom_js/file_post_ajax.js' %}"></script> |
||||||
|
<script src="{% static 'custom_js/select_tag.js' %}"></script> |
||||||
|
|
||||||
|
{% endblock %} |
||||||
|
|
||||||
|
{% block body %} |
||||||
|
<form method="post" class="form-horizontal" name="form2" id="form2"enctype="multipart/form-data"> {% csrf_token %} |
||||||
|
<fieldset> |
||||||
|
<legend><i class="icon-edit"></i>{% if article %} Изменить {% else %} Добавить {% endif %}настройку{% if article %}(<a href="{{ article.get_permanent_url }}" target="_blank">на сайте</a>){% endif %}</legend> |
||||||
|
|
||||||
|
<div class="box span8"> |
||||||
|
<div class="box-header well"> |
||||||
|
<h2><i class="icon-pencil"></i> </h2> |
||||||
|
</div> |
||||||
|
<div class="box-content"> |
||||||
|
{# name #} |
||||||
|
<div class="control-group {% if form.name.errors %}error{% endif %}"> |
||||||
|
<label class="control-label"><b>{{ form.name.label }}:</b></label> |
||||||
|
<div class="controls"> |
||||||
|
{{ form.name }} |
||||||
|
<span class="help-inline">{{ form.name.errors }}</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
{# title #} |
||||||
|
{% include 'admin/forms/multilang.html' with field='title' form=form languages=languages %} |
||||||
|
|
||||||
|
|
||||||
|
{# description #} |
||||||
|
{% include 'admin/forms/multilang.html' with field='description' form=form languages=languages %} |
||||||
|
{# keywords #} |
||||||
|
{% include 'admin/forms/multilang.html' with field='keywords' form=form languages=languages %} |
||||||
|
{# title #} |
||||||
|
{% include 'admin/forms/multilang.html' with field='h1' form=form languages=languages %} |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="controls"> |
||||||
|
|
||||||
|
<input class="btn btn-large btn-primary" type="submit" value="{% if article %}Изменить{% else %}Добавить{% endif %}"> |
||||||
|
<input class="btn btn-large" type="reset" value="Отмена"> |
||||||
|
</div> |
||||||
|
</fieldset> |
||||||
|
</form> |
||||||
|
|
||||||
|
{% endblock %} |
||||||
Loading…
Reference in new issue