create views 'add_object' and 'add_object_with_file' to custom views and add it to all views

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent 073150e432
commit b89ccb3516
  1. 4
      .gitignore
  2. 2
      article/templates/article_add.html
  3. 50
      article/views.py
  4. 4
      city/templates/city_add.html
  5. 35
      city/views.py
  6. 4
      company/templates/company_add.html
  7. 34
      company/views.py
  8. 4
      conference/templates/conference_add.html
  9. 4
      country/tamplates/country_add.html
  10. 40
      country/views.py
  11. 50
      directories/views.py
  12. 78
      functions/custom_views.py
  13. 17
      news/views.py
  14. 4
      organiser/templates/organiser_add.html
  15. 34
      organiser/views.py
  16. 32
      theme/views.py

4
.gitignore vendored

@ -3,4 +3,8 @@
*.[oa] *.[oa]
*~ *~
*.egg-info *.egg-info
*.jpg
*.gif
*.doc
.idea/ .idea/

@ -160,7 +160,7 @@
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label"><b>{{ file_form.purpose.label }}:</b></b></label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -10,48 +10,10 @@ from forms import ArticleForm, Article, ArticleChangeForm
from theme.models import Tag from theme.models import Tag
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm from file.forms import FileModelForm
#pythom
import random
#custom views #custom views
from functions.custom_views import objects_list from functions.custom_views import objects_list, add_object_with_file
@login_required
def article_add(request):
"""
Return form of article and post it on the server.
If form is posted redirect on the page of all articles.
"""
#if form would be not valid key must be same
if request.POST.get('key'):
key = request.POST['key']
else:
key = random.getrandbits(128)
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = ArticleForm(request.POST)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
if form.is_valid():
form.save()
return HttpResponseRedirect('/article/all')
else:
form = ArticleForm(initial={'key': key})
args = {}
args.update(csrf(request))
args['form'] = form
args['languages'] = settings.LANGUAGES
args['file_form'] = file_form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response('article_add.html', args)
@login_required
def article_all(request): def article_all(request):
""" """
Return list of all articles with pagination Return list of all articles with pagination
@ -59,7 +21,17 @@ def article_all(request):
return objects_list(request, Article, 'article_all.html') return objects_list(request, Article, 'article_all.html')
def article_add(request):
"""
Return form of article and post it on the server.
If form is posted redirect on the page of all articles.
"""
return add_object_with_file(request, ArticleForm, 'article_add.html', '/article/all',
{'tag': Tag})
@login_required
def article_change(request, url): def article_change(request, url):
""" """
Return form and fill it with existing Article object data. Return form and fill it with existing Article object data.

@ -166,14 +166,14 @@
<input type="hidden" id="obj_id" value="{{ obj_id }}"> <input type="hidden" id="obj_id" value="{{ obj_id }}">
{# file_path #} {# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}"> <div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label> <label class="control-label"><b>{{ file_form.file_path.label }}:</b></label>
<div class="controls">{{ file_form.file_path }} <div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span> <span class="help-inline">{{ file_form.file_path.errors }}</span>
</div> </div>
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -8,50 +8,26 @@ from django.contrib.contenttypes.models import ContentType
#models and forms #models and forms
from forms import CityForm, CityChangeForm from forms import CityForm, CityChangeForm
from models import City from models import City
from file.models import FileModel, TmpFile from file.models import FileModel
from file.forms import FileModelForm from file.forms import FileModelForm
#python
import random
#custom views #custom views
from functions.custom_views import objects_list from functions.custom_views import objects_list, add_object_with_file
def city_all(request): def city_all(request):
""" """
return list of all cities with pagination return list of all cities with pagination
""" """
return objects_list(request, City, 'city_all.html', 1) return objects_list(request, City, 'city_all.html')
@login_required
def city_add(request): def city_add(request):
""" """
Return form of city and post it on the server. Return form of city and post it on the server.
If form is posted redirect on the page of all cities. If form is posted redirect on the page of all cities.
""" """
#if form would be not valid key must be same return add_object_with_file(request, CityForm, 'city_add.html', '/city/all')
if request.POST.get('key'):
key = request.POST['key']
else:
key = random.getrandbits(128)
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = CityForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/city/all')
else:
form = CityForm(initial={'key': key})
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
args['file_form'] = file_form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response('city_add.html', args)
@login_required @login_required
def city_change(request, url): def city_change(request, url):
@ -111,4 +87,3 @@ def city_change(request, url):
args['obj_id'] = city_id args['obj_id'] = city_id
return render_to_response('city_add.html', args) return render_to_response('city_add.html', args)

@ -235,14 +235,14 @@
<input type="hidden" id="obj_id" value="{{ obj_id }}"> <input type="hidden" id="obj_id" value="{{ obj_id }}">
{# file_path #} {# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}"> <div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label> <label class="control-label"><b>{{ file_form.file_path.label }}:</b></label>
<div class="controls">{{ file_form.file_path }} <div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span> <span class="help-inline">{{ file_form.file_path.errors }}</span>
</div> </div>
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -12,10 +12,8 @@ from theme.models import Tag
from city.models import City from city.models import City
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm from file.forms import FileModelForm
#python
import random
#custom views #custom views
from functions.custom_views import objects_list from functions.custom_views import objects_list, add_object_with_file
def company_all(request): def company_all(request):
@ -31,35 +29,9 @@ def company_add(request):
Return form of company and post it on the server. Return form of company and post it on the server.
If form is posted redirect on the page of all companies. If form is posted redirect on the page of all companies.
""" """
#if form would be not valid key must be same return add_object_with_file(request, CompanyForm, 'company_add.html', '/company/all/',
if request.POST.get('key'): {'city': City, 'tag': Tag})
key = request.POST['key']
else:
key = random.getrandbits(128)
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = CompanyForm(request.POST)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])]
if form.is_valid():
form.save()
return HttpResponseRedirect('/company/all/')
else:
form = CompanyForm(initial={'key': key})
args = {}
args.update(csrf(request))
args['form'] = form
args['languages'] = settings.LANGUAGES
args['file_form'] = file_form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response('company_add.html', args)
@login_required @login_required
def company_change(request, company_id): def company_change(request, company_id):

@ -329,14 +329,14 @@
<input type="hidden" id="obj_id" value="{{ obj_id }}"> <input type="hidden" id="obj_id" value="{{ obj_id }}">
{# file_path #} {# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}"> <div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label> <label class="control-label"><b>{{ file_form.file_path.label }}:</b></label>
<div class="controls">{{ file_form.file_path }} <div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span> <span class="help-inline">{{ file_form.file_path.errors }}</span>
</div> </div>
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -236,14 +236,14 @@
<input type="hidden" id="obj_id" value="{{ obj_id }}"> <input type="hidden" id="obj_id" value="{{ obj_id }}">
{# file_path #} {# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}"> <div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label> <label class="control-label"><b>{{ file_form.file_path.label }}:</b></label>
<div class="controls">{{ file_form.file_path }} <div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span> <span class="help-inline">{{ file_form.file_path.errors }}</span>
</div> </div>
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -12,51 +12,21 @@ from models import Country
from forms import CountryForm, CountryChangeForm from forms import CountryForm, CountryChangeForm
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm from file.forms import FileModelForm
#python #custom views
import random from functions.custom_views import objects_list, add_object_with_file
from functions.custom_views import objects_list
def country_all(request): def country_all(request):
""" """
Return list of all countries with pagination Return list of all countries with pagination
""" """
return objects_list(request, Country, 'country_all.html', 1) return objects_list(request, Country, 'country_all.html')
@login_required
def country_add(request): def country_add(request):
""" """
Return form of country and file and post it on the server. Return form of country and file and post it on the server.
Create key which will be check tmp files
If form is posted redirect on the page of all countries.
FileForm posts with ajax
""" """
#cheks if key already exist(when form wasn't validated) return add_object_with_file(request, CountryForm, 'country_add.html', '/country/all/')
if request.POST.get('key'):
key = request.POST['key']
else:
key = random.getrandbits(128)
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = CountryForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/country/all/')
else:
form = CountryForm(initial={'key': key})
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
args['file_form'] = file_form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response('country_add.html', args)
@login_required @login_required

@ -1,56 +1,18 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from forms import LanguageForm, CurrencyForm, IataForm from forms import LanguageForm, CurrencyForm, IataForm
from django.core.context_processors import csrf #custom views
from functions.custom_views import add_object
from models import Language, Currency
from django.conf import settings
from django.contrib.auth.decorators import login_required
@login_required
def language_add(request): def language_add(request):
""" """
Returns LanguageForm and post it on the server Return LanguageForm and post it on the server
If form is posted redirects on the list of all countries
""" """
if request.POST: return add_object(request, LanguageForm, 'directories_add.html', '/language/add')
form = LanguageForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/language/add')
else:
form = LanguageForm()
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
return render_to_response('directories_add.html', args)
@login_required
def currency_add(request): def currency_add(request):
""" """
Returns CurrencyForm and post it on the server Return CurrencyForm and post it on the server
If form is posted redirects on the list of all countries
""" """
if request.POST: return add_object(request, CurrencyForm, 'directories_add.html', '/currency/add')
form = CurrencyForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/currency/add')
else:
form = CurrencyForm()
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
return render_to_response('directories_add.html', args)

@ -1,7 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
#forms and models
from file.forms import FileModelForm
from file.models import TmpFile
from theme.models import Tag
#python
import random
@login_required @login_required
@ -44,5 +54,73 @@ def filtered_list(request, objects, template, item_per_page=10):
return render_to_response(template, {'objects': objects}) return render_to_response(template, {'objects': objects})
@login_required
def add_object(request, Form, template_string, redirect_string,
choices={}):
if request.POST:
form = Form(request.POST)
#set choices filled by ajax
if 'city' in choices:
form.fields['city'].choices = [(item.id, item.name) for item in choices['city'].objects.filter(country=request.POST['country'])]
if 'tag' in choices:
form.fields['tag'].choices = [(item.id, item.name) for item in choices['tag'].objects.all()]
if form.is_valid():
form.save()
return HttpResponseRedirect(redirect_string)
else:
form = Form()
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
return render_to_response(template_string, args)
@login_required
def add_object_with_file(request, Form, template, redirect_string, choices={}):
"""
Return form and FileForm and post it on the server.
Create key which will be check tmp files
If form is posted redirect on the page in redirect_string
FileForm posts with ajax
choices are ...
"""
#cheks if key already exist(when form wasn't validated)
if request.POST.get('key'):
key = request.POST['key']
else:
key = random.getrandbits(128)
#initial FileForm with key for checking if file connected to object
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = Form(request.POST)
#set choices filled by ajax
if 'city' in choices:
form.fields['city'].choices = [(item.id, item.name) for item in choices['city'].objects.filter(country=request.POST['country'])]
if 'tag' in choices:
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
if form.is_valid():
form.save()
return HttpResponseRedirect(redirect_string)
else:
form = Form(initial={'key':key})
args = {}
args.update(csrf(request))
#languages uses in template
args['languages'] = settings.LANGUAGES
args['form'] = form
args['file_form'] = file_form
#list of files connected to this form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response(template, args)

@ -46,7 +46,11 @@ def news_add(request):
form = NewsForm(request.POST) form = NewsForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'exposition.Exposition':
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'conference.Conference':
form.fields['event_id'].choices = [(item.id, item.name) for item in Conference.objects.all()]
if form.is_valid(): if form.is_valid():
form.save() form.save()
@ -83,7 +87,12 @@ def news_change(request, url):
form = NewsChangeForm(request.POST) form = NewsChangeForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'exposition.Exposition':
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'conference.Conference':
form.fields['event_id'].choices = [(item.id, item.name) for item in Conference.objects.all()]
if form.is_valid(): if form.is_valid():
form.save(news_id) form.save(news_id)
return HttpResponseRedirect('/news/all') return HttpResponseRedirect('/news/all')
@ -120,9 +129,9 @@ def news_change(request, url):
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
if data.get('event'): if data.get('event'):
if data['event']=='conference.Conference': if data['event'] == 'conference.Conference':
events = [(item.id, item.name) for item in Conference.objects.all()] events = [(item.id, item.name) for item in Conference.objects.all()]
elif data['event']=='exposition.Exposition': elif data['event'] == 'exposition.Exposition':
events = [(item.id, item.name) for item in Exposition.objects.all()] events = [(item.id, item.name) for item in Exposition.objects.all()]
form.fields['event_id'].choices = events form.fields['event_id'].choices = events

@ -258,14 +258,14 @@
<input type="hidden" id="obj_id" value="{{ obj_id }}"> <input type="hidden" id="obj_id" value="{{ obj_id }}">
{# file_path #} {# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}"> <div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label> <label class="control-label"><b>{{ file_form.file_path.label }}:</b></label>
<div class="controls">{{ file_form.file_path }} <div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span> <span class="help-inline">{{ file_form.file_path.errors }}</span>
</div> </div>
</div> </div>
{# file purpose #} {# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}"> <div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label> <label class="control-label"><b>{{ file_form.purpose.label }}:</b></label>
<div class="controls">{{ file_form.purpose }} <div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span> <span class="help-inline">{{ file_form.purpose.errors }}</span>
</div> </div>

@ -15,7 +15,7 @@ from file.forms import FileModelForm
#python #python
import random import random
#custom functions #custom functions
from functions.custom_views import objects_list from functions.custom_views import objects_list, add_object_with_file
def organiser_all(request): def organiser_all(request):
@ -25,40 +25,16 @@ def organiser_all(request):
return objects_list(request, Organiser, 'organiser_all.html') return objects_list(request, Organiser, 'organiser_all.html')
def organiser_add(request): def organiser_add(request):
""" """
Return form of organiser and post it on the server. Return form of organiser and post it on the server.
If form is posted redirect on the page of all organiser. If form is posted redirect on the page of all organiser.
""" """
#if form would be not valid key must be same return add_object_with_file(request, OrganiserForm, 'organiser_add.html', '/organiser/all/',
if request.POST.get('key'): choices={'city': City, 'tag': Tag})
key = request.POST['key']
else:
key = random.getrandbits(128)
file_form = FileModelForm(initial={'key': key})
if request.POST:
form = OrganiserForm(request.POST)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])]
if form.is_valid():
form.save()
return HttpResponseRedirect('/organiser/all/')
else:
form = OrganiserForm(initial={'key':key})
args = {}
args.update(csrf(request))
args['form'] = form
args['languages'] = settings.LANGUAGES
args['file_form'] = file_form
args['files'] = TmpFile.objects.filter(key=key)
return render_to_response('organiser_add.html', args)
def organiser_change(request, organiser_id): def organiser_change(request, organiser_id):
""" """

@ -11,7 +11,7 @@ from django.contrib.auth.decorators import login_required
from forms import ThemeForm, TagForm from forms import ThemeForm, TagForm
from models import Theme, Tag from models import Theme, Tag
#custom views #custom views
from functions.custom_views import objects_list from functions.custom_views import objects_list, add_object
def theme_all(request): def theme_all(request):
@ -22,39 +22,13 @@ def tag_all(request):
return objects_list(request, Tag, 'tag_all.html') return objects_list(request, Tag, 'tag_all.html')
@login_required
def theme_add(request): def theme_add(request):
if request.POST: return add_object(request, ThemeForm, 'theme_add.html', '/theme/theme/all')
form = ThemeForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/theme/theme/all')
else:
form = ThemeForm()
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
return render_to_response('theme_add.html', args)
@login_required
def tag_add(request): def tag_add(request):
if request.POST: return add_object(request, TagForm, 'tag_add.html', '/theme/tag/all')
form = TagForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/theme/tag/all')
else:
form = TagForm()
args = {}
args.update(csrf(request))
args['languages'] = settings.LANGUAGES
args['form'] = form
return render_to_response('tag_add.html', args)
@login_required @login_required
def theme_change(request, theme_id=None): def theme_change(request, theme_id=None):

Loading…
Cancel
Save