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