parent
d423922729
commit
8c632b6bcc
14 changed files with 190 additions and 40 deletions
@ -0,0 +1,37 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.contrib.redirects.models import Redirect |
||||||
|
from django.views.generic import CreateView, DeleteView, ListView, UpdateView |
||||||
|
from django.core.urlresolvers import reverse_lazy |
||||||
|
|
||||||
|
from .forms import RedirectForm |
||||||
|
|
||||||
|
|
||||||
|
############################################################################### |
||||||
|
# Redirects |
||||||
|
############################################################################### |
||||||
|
class RedirectMixin(object): |
||||||
|
form_class = RedirectForm |
||||||
|
model = Redirect |
||||||
|
template_name = 'admin/redirects/create_or_edit.html' |
||||||
|
success_url = reverse_lazy('redirects-list') |
||||||
|
|
||||||
|
def get_success_url(self): |
||||||
|
return self.success_url |
||||||
|
|
||||||
|
|
||||||
|
class RedirectList(RedirectMixin, ListView): |
||||||
|
template_name = 'admin/redirects/list.html' |
||||||
|
|
||||||
|
|
||||||
|
class RedirectCreate(RedirectMixin, CreateView): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class RedirectUpdate(RedirectMixin, UpdateView): |
||||||
|
pass |
||||||
|
|
||||||
|
|
||||||
|
class RedirectDelete(RedirectMixin, DeleteView): |
||||||
|
def get(self, request, *args, **kwargs): |
||||||
|
return self.post(request, *args, **kwargs) |
||||||
|
|
||||||
@ -0,0 +1,11 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.conf.urls import patterns, url |
||||||
|
from .admin import * |
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = patterns('redirects.admin', |
||||||
|
url(r'^$', RedirectList.as_view(), name='redirects-list'), |
||||||
|
url(r'^add/$', RedirectCreate.as_view(), name='redirects-add'), |
||||||
|
url(r'^(?P<pk>\d+)/edit/$', RedirectUpdate.as_view(), name='redirects-edit'), |
||||||
|
url(r'^(?P<pk>\d+)/delete/$', RedirectDelete.as_view(), name='redirects-delete'), |
||||||
|
) |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django import forms |
||||||
|
from django.contrib.redirects.models import Redirect |
||||||
|
from django.conf import settings |
||||||
|
from django.contrib.redirects.admin import RedirectAdmin |
||||||
|
from django.utils.translation import ugettext as _ |
||||||
|
|
||||||
|
|
||||||
|
class RedirectForm(forms.ModelForm): |
||||||
|
verbose = _(u'Создание/редактирование редиректа') |
||||||
|
class Meta: |
||||||
|
model = Redirect |
||||||
|
fields = ['old_path', 'new_path'] |
||||||
|
|
||||||
|
def save(self, commit=True): |
||||||
|
obj = super(RedirectForm, self).save(commit=False) |
||||||
|
obj.site_id = settings.SITE_ID |
||||||
|
if commit: |
||||||
|
obj.save() |
||||||
|
return obj |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
{% extends 'base.html' %} |
||||||
|
{% load static %} |
||||||
|
{% load i18n %} |
||||||
|
|
||||||
|
{% block body %} |
||||||
|
<form method="post" class="form-horizontal" action="."> {% csrf_token %} |
||||||
|
<fieldset> |
||||||
|
<div class="box span8"> |
||||||
|
<div class="box-header well"> |
||||||
|
<h2><i class="icon-pencil"></i>{{ form.verbose }}</h2> |
||||||
|
</div> |
||||||
|
<div class="box-content"> |
||||||
|
|
||||||
|
{% for field in form %} |
||||||
|
<div class="control-group {% if field.errors %}error{% endif %}"> |
||||||
|
<label class="control-label"><b>{{ field.label }}:</b></label> |
||||||
|
<div class="controls">{{ field }} |
||||||
|
<span class="help-inline">{{ field.errors }}</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{% endfor %} |
||||||
|
<div class="help-inline"> |
||||||
|
{% blocktrans %} |
||||||
|
!!! Ссылки должны начинаться и заканчиваться знаком / (правый слэш) |
||||||
|
<br>Работает только если по данному адресу 404. |
||||||
|
{% endblocktrans %} |
||||||
|
</div> |
||||||
|
|
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<div class="controls"> |
||||||
|
<input class="btn btn-large btn-primary" type="submit" value="Готово"> |
||||||
|
<input class="btn btn-large" type="reset" value="Отмена"> |
||||||
|
</div> |
||||||
|
</form> |
||||||
|
{% endblock %} |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
{% extends 'base.html' %} |
||||||
|
{% load i18n %} |
||||||
|
|
||||||
|
{% block body %} |
||||||
|
<div class="box span8"> |
||||||
|
<div class="box-header well"> |
||||||
|
<h2><i class="icon-arrow-down"></i>{% trans "Список редиректов" %}</h2> |
||||||
|
</div> |
||||||
|
<div class="box-content"> |
||||||
|
{% block list_table %} |
||||||
|
<a class="btn btn-success" href="{% url 'redirects-add' %}"><i class="icon-plus-sign icon-white"></i> {% trans "Добавить редирект" %}</a> |
||||||
|
<table class="table table-hover"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>{% trans "Откуда" %}</th> |
||||||
|
<th>{% trans "Куда" %}</th> |
||||||
|
<th> </th> |
||||||
|
<th> </th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{% for item in object_list %} |
||||||
|
<tr> |
||||||
|
<td>{{ item.old_path }}</td> |
||||||
|
<td>{{ item.new_path }}</td> |
||||||
|
<td><a class="btn btn-info" href="{% url 'redirects-edit' item.pk %}"><i class="icon-edit icon-white"></i>{% trans "Изменить" %}</a></td> |
||||||
|
<td><a class="btn btn-danger delete" href="{% url 'redirects-delete' item.pk %}"><i class="icon-trash icon-white"></i>{% trans "Удалить" %}</a></td> |
||||||
|
</tr> |
||||||
|
{% endfor %} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
{% endblock %} |
||||||
|
</div> |
||||||
|
{# pagination #} |
||||||
|
{% include 'admin/includes/admin_pagination.html' with page_obj=page_obj %} |
||||||
|
</div> |
||||||
|
{% endblock %} |
||||||
Loading…
Reference in new issue