diff --git a/article/admin.py b/article/admin.py index a82470ef..0abdc8d5 100644 --- a/article/admin.py +++ b/article/admin.py @@ -13,6 +13,7 @@ from file.forms import FileModelForm #custom views from functions.custom_views import objects_list, add_object_with_file, delete_object +from functions.views_help import get_referer def article_all(request): @@ -21,6 +22,17 @@ def article_all(request): """ return objects_list(request, Article, 'article_all.html') +@login_required +def article_copy(request, url): + + article = Article.objects.safe_get(url=url) + if not article: + return HttpResponseRedirect(get_referer(request)) + else: + article.clone() + return HttpResponseRedirect(get_referer(request)) + + def article_add(request): """ Return form of article and post it on the server. diff --git a/article/models.py b/article/models.py index d41a853b..d00b9af3 100644 --- a/article/models.py +++ b/article/models.py @@ -20,7 +20,7 @@ class Article(TranslatableModel): """ #set manager of this model - objects = ArticleManager + objects = ArticleManager() url = models.SlugField(unique=True) theme = models.ManyToManyField('theme.Theme') diff --git a/article/urls.py b/article/urls.py index 3af9b30b..e9537329 100644 --- a/article/urls.py +++ b/article/urls.py @@ -5,5 +5,6 @@ urlpatterns = patterns('article.admin', url(r'^add/$', 'article_add'), url(r'^delete/(?P.*)/$', 'article_delete'), url(r'^change/(.*)/$', 'article_change'), + url(r'^copy/(.*)/$', 'article_copy'), url(r'^all/$', 'article_all'), ) \ No newline at end of file diff --git a/conference/admin.py b/conference/admin.py index f9e9fd2a..5f3eca58 100644 --- a/conference/admin.py +++ b/conference/admin.py @@ -18,6 +18,7 @@ from file.forms import FileModelForm import random #custom views from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def conference_all(request): @@ -27,6 +28,43 @@ def conference_all(request): return objects_list(request, Conference, 'conference_all.html') +@login_required +def conference_switch(request, url, action): + """ + turn on or off conference + + take: + url as url of conference + + action as action what to do('on' or 'off') + + """ + conference = Conference.objects.safe_get(url=url) + if not conference: + return HttpResponse('error') + else: + if action == 'on': + conference.on() + return HttpResponse('on') + elif action == 'off': + conference.off() + return HttpResponse('off') + else: + return HttpResponse('error') + + +@login_required +def conference_copy(request, url): + + conference = Conference.objects.safe_get(url=url) + if not conference: + return HttpResponseRedirect(get_referer(request)) + else: + conference.clone() + return HttpResponseRedirect(get_referer(request)) + + + @login_required def conference_add(request): """ diff --git a/conference/models.py b/conference/models.py index c64ced91..8d026e74 100644 --- a/conference/models.py +++ b/conference/models.py @@ -84,6 +84,17 @@ class Conference(TranslatableModel): def __unicode__(self): return self.lazy_translation_getter('name', unicode(self.pk)) + def on(self): + self.is_published = True + self.canceled_by_administrator = False + self.save() + + def off(self): + self.is_published = False + self.canceled_by_administrator = True + self.save() + + def cancel(self): self.canceled_by_administrator = True diff --git a/conference/urls.py b/conference/urls.py index 80e18e54..653ac39e 100644 --- a/conference/urls.py +++ b/conference/urls.py @@ -5,5 +5,7 @@ urlpatterns = patterns('conference.admin', url(r'^add.*/$', 'conference_add'), url(r'^delete/(?P.*)$', 'conference_delete'), url(r'^change/(?P.*)/$', 'conference_change'), + url(r'^copy/(?P.*)/$', 'conference_copy'), + url(r'^switch/(?P.*)/(?P.*)$', 'conference_switch'), url(r'^all/$', 'conference_all'), ) \ No newline at end of file diff --git a/news/admin.py b/news/admin.py index 00456332..96c04475 100644 --- a/news/admin.py +++ b/news/admin.py @@ -9,7 +9,7 @@ from django.db.models.loading import get_model import json #model and forms from models import News -from news.forms import NewsForm +from news.forms import NewsForm, NewsDeleteForm from exposition.models import Exposition from conference.models import Conference from theme.models import Tag @@ -18,7 +18,8 @@ from file.forms import FileModelForm #python import random #custom views -from functions.custom_views import objects_list +from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def news_all(request): @@ -27,6 +28,21 @@ def news_all(request): """ return objects_list(request, News, 'news_all.html') +@login_required +def news_copy(request, url): + + news = News.objects.safe_get(url=url) + if not news: + return HttpResponseRedirect(get_referer(request)) + else: + news.clone() + return HttpResponseRedirect(get_referer(request)) + +def news_delete(request, url): + return delete_object(request, News, NewsDeleteForm, url, '/admin/news/all') + + + @login_required def news_add(request): diff --git a/news/forms.py b/news/forms.py index 8bf0091b..628fb7d7 100644 --- a/news/forms.py +++ b/news/forms.py @@ -133,4 +133,11 @@ class NewsForm(forms.Form): except: return main_title_ru - raise ValidationError('Новость с таким названием уже существует') \ No newline at end of file + raise ValidationError('Новость с таким названием уже существует') + +class NewsDeleteForm(forms.ModelForm): + url = forms.CharField(widget=forms.HiddenInput()) + + class Meta: + model = News + fields = ('url',) diff --git a/news/models.py b/news/models.py index 7c9069e0..cb857ec0 100644 --- a/news/models.py +++ b/news/models.py @@ -18,7 +18,7 @@ class NewsManager(TranslationManager): TYPES = ('announcement', 'news', 'overview') class News(TranslatableModel): #set manager of this model - objects = NewsManager + objects = NewsManager() content_type = models.ForeignKey(ContentType, null=True) object_id = models.PositiveIntegerField(blank=True, null=True) diff --git a/news/urls.py b/news/urls.py index acc98274..5f45ed32 100644 --- a/news/urls.py +++ b/news/urls.py @@ -3,7 +3,9 @@ from django.conf.urls import patterns, include, url urlpatterns = patterns('news.admin', url(r'^add.*/$', 'news_add'), - url(r'^change/(.*)/$', 'news_change'), + url(r'^change/(?P.*)/$', 'news_change'), + url(r'^copy/(?P.*)/$', 'news_copy'), + url(r'^delete/(?P.*)/$', 'news_delete'), url(r'^all/$', 'news_all'), #ajax url(r'^event/$', 'get_event_id'), diff --git a/place_conference/admin.py b/place_conference/admin.py index 136788da..617fd4ec 100644 --- a/place_conference/admin.py +++ b/place_conference/admin.py @@ -18,6 +18,7 @@ from file.forms import FileModelForm import random #custom views from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def conference_all(request): @@ -27,6 +28,18 @@ def conference_all(request): return objects_list(request, PlaceConference, 'place_conference_all.html') +@login_required +def place_conference_copy(request, url): + + place_conference = PlaceConference.objects.safe_get(url=url) + if not place_conference: + return HttpResponseRedirect(get_referer(request)) + else: + place_conference.clone() + return HttpResponseRedirect(get_referer(request)) + + + # http://stackoverflow.com/questions/2406537/django-formsets-make-first-required/4951032#4951032 @login_required def conference_add(request): diff --git a/place_conference/urls.py b/place_conference/urls.py index cf3e7737..5328d74a 100644 --- a/place_conference/urls.py +++ b/place_conference/urls.py @@ -5,5 +5,6 @@ urlpatterns = patterns('place_conference.admin', url(r'^add.*/$', 'conference_add'), url(r'^delete/(?P.*)/$', 'conference_delete'), url(r'^change/(?P.*)/$', 'conference_change'), + url(r'^copy/(?P.*)/$', 'place_conference_copy'), url(r'^all/$', 'conference_all'), ) diff --git a/place_exposition/admin.py b/place_exposition/admin.py index a26b1782..e4125821 100644 --- a/place_exposition/admin.py +++ b/place_exposition/admin.py @@ -19,6 +19,7 @@ from file.forms import FileModelForm import random #custom fields from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def exposition_all(request): @@ -27,6 +28,17 @@ def exposition_all(request): """ return objects_list(request, PlaceExposition, 'place_exposition_all.html') +@login_required +def place_exposition_copy(request, url): + + place_exposition = PlaceExposition.objects.safe_get(url=url) + if not place_exposition: + return HttpResponseRedirect(get_referer(request)) + else: + place_exposition.clone() + return HttpResponseRedirect(get_referer(request)) + + @login_required def exposition_add(request): diff --git a/place_exposition/urls.py b/place_exposition/urls.py index 707db784..6fe5da6a 100644 --- a/place_exposition/urls.py +++ b/place_exposition/urls.py @@ -5,5 +5,6 @@ urlpatterns = patterns('place_exposition.admin', url(r'^add.*/$', 'exposition_add'), url(r'^delete/(?P.*)/$', 'exposition_delete'), url(r'^change/(?P.*)/$', 'exposition_change'), + url(r'^copy/(?P.*)/$', 'place_exposition_copy'), url(r'^all/$', 'exposition_all'), ) diff --git a/proj/settings.py b/proj/settings.py index 624287ba..b47bd667 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -38,7 +38,7 @@ ALLOWED_HOSTS = [] # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # In a Windows environment this must be set to your system time zone. -TIME_ZONE = 'America/Chicago' +TIME_ZONE = 'UTC' # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html @@ -106,8 +106,6 @@ STATICFILES_DIRS = ( # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. '/home/kotzilla/Documents/qwer/static', - - ) # List of finder classes that know how to find static files in diff --git a/seminar/admin.py b/seminar/admin.py index f8725736..e1fd1f0d 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -16,6 +16,7 @@ from file.forms import FileModelForm import random #custom views from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def seminar_all(request): @@ -24,6 +25,40 @@ def seminar_all(request): """ return objects_list(request, Seminar, 'seminar_all.html') +@login_required +def seminar_switch(request, url, action): + """ + turn on or off seminar + + take: + url as url of seminar + + action as action what to do('on' or 'off') + + """ + seminar = Seminar.objects.safe_get(url=url) + if not seminar: + return HttpResponse('error') + else: + if action == 'on': + seminar.on() + return HttpResponse('on') + elif action == 'off': + seminar.off() + return HttpResponse('off') + else: + return HttpResponse('error') + + +@login_required +def seminar_copy(request, url): + + seminar = Seminar.objects.safe_get(url=url) + if not seminar: + return HttpResponseRedirect(get_referer(request)) + else: + seminar.clone() + return HttpResponseRedirect(get_referer(request)) @login_required def seminar_add(request): diff --git a/seminar/models.py b/seminar/models.py index 20fc6bcb..624f6fe3 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -80,6 +80,16 @@ class Seminar(TranslatableModel): def __unicode__(self): return self.lazy_translation_getter('name', unicode(self.pk)) + def on(self): + self.is_published = True + self.canceled_by_administrator = False + self.save() + + def off(self): + self.is_published = False + self.canceled_by_administrator = True + self.save() + def cancel(self): self.canceled_by_administrator = True diff --git a/seminar/urls.py b/seminar/urls.py index 64a4dee3..38a9a710 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -5,5 +5,7 @@ urlpatterns = patterns('seminar.admin', url(r'^add.*/$', 'seminar_add'), url(r'^delete/(?P.*)/$', 'seminar_delete'), url(r'^change/(?P.*)/$', 'seminar_change'), + url(r'^copy/(?P.*)/$', 'seminar_copy'), + url(r'^switch/(?P.*)/(?P.*)$', 'seminar_switch'), url(r'^all/$', 'seminar_all'), ) diff --git a/settings/admin.py b/settings/admin.py index 9d4e3ec3..e51c0a1f 100644 --- a/settings/admin.py +++ b/settings/admin.py @@ -11,7 +11,10 @@ from forms import SettingsForm @login_required def change_settings(request): - form = SettingsForm() - args = {'form': form, 'languages': settings.LANGUAGES} - args.update(csrf(request)) - return render_to_response('settings.html', args) \ No newline at end of file + if request.POST: + pass + else: + form = SettingsForm() + args = {'form': form, 'languages': settings.LANGUAGES} + args.update(csrf(request)) + return render_to_response('settings.html', args) \ No newline at end of file diff --git a/static/custom_js/event_switcher.js b/static/custom_js/event_switcher.js new file mode 100644 index 00000000..93396abc --- /dev/null +++ b/static/custom_js/event_switcher.js @@ -0,0 +1,30 @@ + $(document).ready(function(){ + + $('.on').click(function(){ + var url = $(this).attr('href') + var $this = $(this) + $.get( + url, function(data){ + if (data == 'on'){ + $this.hide(); + $this.siblings('.off').show(); + } + });//end get + return false; + }); + + $('.off').click(function(){ + var url = $(this).attr('href') + var $this = $(this) + $.get( + url, function(data){ + if (data == 'off'){ + $this.hide(); + $this.siblings('.on').show(); + } + } + ) + return false; + }); + + }); diff --git a/templates/admin/article/article_all.html b/templates/admin/article/article_all.html index aa4b7cc7..21c8bde8 100644 --- a/templates/admin/article/article_all.html +++ b/templates/admin/article/article_all.html @@ -13,7 +13,7 @@ Displays lists of all articles in the table - + @@ -22,15 +22,24 @@ Displays lists of all articles in the table {% for item in objects %} - + + + + + diff --git a/templates/admin/conference/conference_all.html b/templates/admin/conference/conference_all.html index 6c7f11d8..dd12f3d0 100644 --- a/templates/admin/conference/conference_all.html +++ b/templates/admin/conference/conference_all.html @@ -1,4 +1,11 @@ {% extends 'base.html' %} +{% load static %} +{% block scripts %} + + + +{% endblock %} + {% block body %}
@@ -10,7 +17,6 @@
idЗаголовок Автор  
{{ item.id }}{{ item.main_title }} {% ifnotequal item.user None %}{{ item.user }} {% endifnotequal %} - - Изменить + + Изменить - - Удалить + + + Копировать + + + + Удалить
- @@ -20,19 +26,37 @@ {% for item in objects %} - + + + + + + diff --git a/templates/admin/exposition/exposition_all.html b/templates/admin/exposition/exposition_all.html index e3caa6f4..6db290cb 100644 --- a/templates/admin/exposition/exposition_all.html +++ b/templates/admin/exposition/exposition_all.html @@ -1,40 +1,12 @@ {% extends 'base.html' %} - +{% load static %} {% block scripts %} - - }); - {% endblock %} + {% block body %}
diff --git a/templates/admin/news/news_all.html b/templates/admin/news/news_all.html index e76f5426..f532a3bf 100644 --- a/templates/admin/news/news_all.html +++ b/templates/admin/news/news_all.html @@ -28,8 +28,18 @@ Displays lists of all news in the table
+ + diff --git a/templates/admin/place_conference/place_conference_all.html b/templates/admin/place_conference/place_conference_all.html index 3bacf809..11c7515b 100644 --- a/templates/admin/place_conference/place_conference_all.html +++ b/templates/admin/place_conference/place_conference_all.html @@ -10,7 +10,6 @@
id Название Дата начала  
{{ item.id }} {{ item.name }} {{ item.data_begin }} + + Отключить + + + Включить + + - - Изменить + + Изменить + + + + Копировать + Удалить -
{{ item.main_title }} {{ item.type }} - - Изменить + + Изменить + + + + Копировать + + + + Удалить
- @@ -21,18 +20,23 @@ {% for item in objects %} - + + diff --git a/templates/admin/place_exposition/place_exposition_all.html b/templates/admin/place_exposition/place_exposition_all.html index 62de7a7b..418051bc 100644 --- a/templates/admin/place_exposition/place_exposition_all.html +++ b/templates/admin/place_exposition/place_exposition_all.html @@ -10,7 +10,6 @@
id Название Краткое описание Страна
{{ item.id }} {{ item.name }} {% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %} {% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %} {% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %} - - Изменить + + Изменить - - - Удалить + + + Копировать + + + + Удалить
- @@ -21,18 +20,24 @@ {% for item in objects %} - + - - Удалить + diff --git a/templates/admin/seminar/seminar_all.html b/templates/admin/seminar/seminar_all.html index 66e0de10..ae96b9da 100644 --- a/templates/admin/seminar/seminar_all.html +++ b/templates/admin/seminar/seminar_all.html @@ -1,4 +1,10 @@ {% extends 'base.html' %} +{% load static %} +{% block scripts %} + + + +{% endblock %} {% block body %}
@@ -10,7 +16,6 @@
id Название Краткое описание Страна
{{ item.id }} {{ item.name }} {% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %} {% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %} {% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %} - - Изменить + + Изменить + + + Копировать + + + + Удалить
- @@ -20,19 +25,37 @@ {% for item in objects %} - + + + + - - Удалить + + diff --git a/templates/admin/settings/settings.html b/templates/admin/settings/settings.html index c582570f..e7f79fde 100644 --- a/templates/admin/settings/settings.html +++ b/templates/admin/settings/settings.html @@ -5,13 +5,17 @@
{% csrf_token %} - {% for field in form %} - {{ field.name }} - {% with field='{{ field.int }}' form=form languages=languages %} - {% include 'admin/forms/multilang.html' %} - {% endwith %} + {# template hall placeconference #} + {% with field='place_conf_hall' form=form languages=languages %} + {% include 'admin/forms/multilang.html' %} + {% endwith %} + + {# template hall placeexposition #} + {% with field='place_exp_hall' form=form languages=languages %} + {% include 'admin/forms/multilang.html' %} + {% endwith %} + - {% endfor %} {% endblock %} \ No newline at end of file diff --git a/templates/admin/theme/tag_all.html b/templates/admin/theme/tag_all.html index 074f937b..60a93a1b 100644 --- a/templates/admin/theme/tag_all.html +++ b/templates/admin/theme/tag_all.html @@ -10,7 +10,6 @@
id Название Дата начала  
{{ item.id }} {{ item.name }} {{ item.data_begin }} + + Отключить + + + Включить + + - - Изменить + + Изменить + + + + Удалить + + + Удалить -
- @@ -21,18 +20,25 @@ {% for item in objects %} - - - Удалить + + + diff --git a/templates/admin/theme/theme_all.html b/templates/admin/theme/theme_all.html index d5904314..6bcdaff4 100644 --- a/templates/admin/theme/theme_all.html +++ b/templates/admin/theme/theme_all.html @@ -10,7 +10,6 @@
id Название Тема Заголовок
{{ item.id }} {{ item.name }} {{ item.theme }} {{ item.main_title }} - - Изменить + + Изменить + + + Копировать + + + + Удалить
- @@ -20,19 +19,26 @@ {% for item in objects %} - - - Удалить + + + + diff --git a/templates/admin/webinar/webinar_all.html b/templates/admin/webinar/webinar_all.html index 315a7834..67fd2dc1 100644 --- a/templates/admin/webinar/webinar_all.html +++ b/templates/admin/webinar/webinar_all.html @@ -1,4 +1,11 @@ {% extends 'base.html' %} +{% load static %} +{% block scripts %} + + + +{% endblock %} + {% block body %}
@@ -10,7 +17,6 @@
id Название Заголовок  
{{ item.id }} {{ item.name }} {{ item.main_title }} - - Изменить + + Изменить + + + Копировать - + + Удалить + +
- @@ -20,19 +26,37 @@ {% for item in objects %} - + + + + - - Удалить + + diff --git a/theme/admin.py b/theme/admin.py index 69c301fb..0a3d294d 100644 --- a/theme/admin.py +++ b/theme/admin.py @@ -12,6 +12,7 @@ from forms import ThemeForm, TagForm, ThemeDeleteForm, TagDeleteForm from models import Theme, Tag #custom views from functions.custom_views import objects_list, add_object, delete_object +from functions.views_help import get_referer def theme_all(request): @@ -34,6 +35,25 @@ def theme_delete(request, theme_id): def tag_delete(request, tag_id): return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all') +@login_required +def theme_copy(request, theme_id): + + theme = Theme.objects.safe_get(id=theme_id) + if not theme: + return HttpResponseRedirect(get_referer(request)) + else: + theme.clone() + return HttpResponseRedirect(get_referer(request)) + +@login_required +def tag_copy(request, tag_id): + + tag = Tag.objects.safe_get(id=tag_id) + if not tag: + return HttpResponseRedirect(get_referer(request)) + else: + tag.clone() + return HttpResponseRedirect(get_referer(request)) @login_required def theme_change(request, theme_id=None): diff --git a/theme/forms.py b/theme/forms.py index 4202ff6c..2b545984 100644 --- a/theme/forms.py +++ b/theme/forms.py @@ -76,6 +76,8 @@ class ThemeForm(forms.Form): if not types: types = [i for (i, k) in Theme.FLAGS] return types + else: + return types class TagForm(forms.Form): diff --git a/theme/urls.py b/theme/urls.py index c71ffbec..cf015371 100644 --- a/theme/urls.py +++ b/theme/urls.py @@ -8,6 +8,8 @@ urlpatterns = patterns('theme.admin', url(r'^tag/delete/(?P\d+)/$', 'tag_delete'), url(r'^theme/change/(?P\d+).*/$', 'theme_change'), url(r'^tag/change/(?P\d+).*/$', 'tag_change'), + url(r'^theme/copy/(?P\d+).*/$', 'theme_copy'), + url(r'^tag/copy/(?P\d+).*/$', 'tag_copy'), url(r'^theme/all/$', 'theme_all'), url(r'^tag/all/$', 'tag_all'), ) diff --git a/webinar/admin.py b/webinar/admin.py index fe5bb12a..437aa67b 100644 --- a/webinar/admin.py +++ b/webinar/admin.py @@ -15,6 +15,7 @@ from file.forms import FileModelForm import random #custom views from functions.custom_views import objects_list, delete_object +from functions.views_help import get_referer def webinar_all(request): @@ -23,6 +24,40 @@ def webinar_all(request): """ return objects_list(request, Webinar, 'webinar_all.html') +@login_required +def webinar_copy(request, url): + + webinar = Webinar.objects.safe_get(url=url) + if not webinar: + return HttpResponseRedirect(get_referer(request)) + else: + webinar.clone() + return HttpResponseRedirect(get_referer(request)) + +@login_required +def webinar_switch(request, url, action): + """ + turn on or off webinar + + take: + url as url of webinar + + action as action what to do('on' or 'off') + + """ + webinar = Webinar.objects.safe_get(url=url) + if not webinar: + return HttpResponse('error') + else: + if action == 'on': + webinar.on() + return HttpResponse('on') + elif action == 'off': + webinar.off() + return HttpResponse('off') + else: + return HttpResponse('error') + @login_required def webinar_add(request): @@ -60,7 +95,7 @@ def webinar_add(request): def webinar_delete(request, url): - return delete_object(request, Webinar, WebinarDeleteForm, url, '/admin/webinar/delete') + return delete_object(request, Webinar, WebinarDeleteForm, url, '/admin/webinar/all') @login_required diff --git a/webinar/models.py b/webinar/models.py index 16ce8b8f..71fe1f4b 100644 --- a/webinar/models.py +++ b/webinar/models.py @@ -80,6 +80,16 @@ class Webinar(TranslatableModel): def cancel(self): self.canceled_by_administrator = True + def on(self): + self.is_published = True + self.canceled_by_administrator = False + self.save() + + def off(self): + self.is_published = False + self.canceled_by_administrator = True + self.save() + def clone(self): """ Return an identical copy of the instance with a new ID. diff --git a/webinar/urls.py b/webinar/urls.py index cff07e42..65a84f7e 100644 --- a/webinar/urls.py +++ b/webinar/urls.py @@ -5,5 +5,7 @@ urlpatterns = patterns('webinar.admin', url(r'^add.*/$', 'webinar_add'), url(r'^delete/(?P.*)/$', 'webinar_delete'), url(r'^change/(?P.*)/$', 'webinar_change'), + url(r'^copy/(?P.*)/$', 'webinar_copy'), + url(r'^switch/(?P.*)/(?P.*)$', 'webinar_switch'), url(r'^all/$', 'webinar_all'), -) +) \ No newline at end of file
id Название Дата  
{{ item.id }} {{ item.name }} {{ item.data_begin }} + + Отключить + + + Включить + + - - Изменить + + Изменить + + + + Копировать + + + Удалить -