8117e9b877
This view was getting huge with ~500 items on it, and most people are not really interested in seeing every single news item. Use the drop in pagination and add some controls that still allow browsing to any page of the list. Signed-off-by: Dan McGee <dan@archlinux.org>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
from django import forms
|
|
from django.contrib.auth.decorators import permission_required
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import redirect
|
|
from django.views.decorators.cache import never_cache
|
|
from django.views.generic import list_detail, create_update
|
|
from django.views.generic.simple import direct_to_template
|
|
|
|
import markdown
|
|
|
|
from .models import News
|
|
|
|
def view(request, newsid):
|
|
return list_detail.object_detail(request, News.objects.all(), newsid,
|
|
template_name="news/view.html",
|
|
template_object_name='news')
|
|
|
|
#TODO: May as well use a date-based list here sometime
|
|
def list(request):
|
|
return list_detail.object_list(request,
|
|
News.objects.all().select_related('author').defer('content'),
|
|
paginate_by=50,
|
|
template_name="news/list.html",
|
|
template_object_name="news")
|
|
|
|
class NewsForm(forms.ModelForm):
|
|
class Meta:
|
|
model = News
|
|
exclude=('id', 'author', 'postdate')
|
|
|
|
@permission_required('main.add_news')
|
|
@never_cache
|
|
def add(request):
|
|
if request.POST:
|
|
form = NewsForm(request.POST)
|
|
if form.is_valid():
|
|
newsitem = form.save(commit=False)
|
|
newsitem.author = request.user
|
|
newsitem.save()
|
|
return redirect(newsitem.get_absolute_url())
|
|
else:
|
|
form = NewsForm()
|
|
return direct_to_template(request, 'news/add.html', { 'form': form })
|
|
|
|
@permission_required('main.delete_news')
|
|
@never_cache
|
|
def delete(request, newsid):
|
|
return create_update.delete_object(request,
|
|
News,
|
|
object_id=newsid,
|
|
post_delete_redirect='/news/',
|
|
template_name='news/delete.html',
|
|
template_object_name='news')
|
|
|
|
@permission_required('main.change_news')
|
|
@never_cache
|
|
def edit(request, newsid):
|
|
return create_update.update_object(request,
|
|
object_id=newsid,
|
|
form_class=NewsForm,
|
|
template_name="news/add.html")
|
|
|
|
@permission_required('main.change_news')
|
|
@never_cache
|
|
def preview(request):
|
|
markup = ''
|
|
if request.POST:
|
|
data = request.POST.get('data', '')
|
|
markup = markdown.markdown(data)
|
|
return HttpResponse(markup)
|
|
|
|
# vim: set ts=4 sw=4 et:
|