pasteque/paste/views.py

68 lines
2.4 KiB
Python

from . import renderers
from django.urls import reverse
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Paste, Language
from .forms import PasteForm
from webtools import settings
@csrf_exempt
def index(request):
"""Displays form."""
data = {"menu": "index", "max_characters": settings.PASTE["max_characters"]}
if request.method == "POST":
paste = Paste()
paste.choose_slug()
if request.FILES:
for language_name, any_file in request.FILES.items():
break
language = Language.by_name(language_name)
form = PasteForm(
{
"language": language.id,
"lifetime": settings.PASTE["default_lifetime"],
"content": any_file.read().decode(),
},
instance=paste,
)
else:
form = PasteForm(request.POST, instance=paste)
if not form.is_valid():
data["form"] = form
return render(request, "paste/index.html", data)
form.save() # Some logic added to overrided method, see forms.py
location = request.build_absolute_uri(
reverse("short_paste", kwargs={"slug": paste.slug})
)
return HttpResponseRedirect(
location, content=location + "\n", content_type="text/plain"
)
data["form"] = PasteForm(
initial={
"lifetime": settings.PASTE["default_lifetime"],
"language": Language.by_name(settings.PASTE["default_language"]).id,
}
)
data["absolute_index_url"] = request.build_absolute_uri(reverse("index"))
return render(request, "paste/index.html", data)
def show(request, slug, renderer="pygments"):
"""Display paste."""
# Fetching object
paste = get_object_or_404(Paste, slug=slug)
data = {"slug": slug}
# Handling expiration
# Before rendering actions
paste.incr_viewcount()
# Handling rendering modes
if not renderer or renderer not in settings.PASTE["enabled_renderers"]:
renderer = settings.PASTE["default_renderer"]
data["current_renderer"] = renderer
data["renderers"] = settings.PASTE["enabled_renderers"]
render_method = getattr(renderers, "render_%s" % renderer)
return render_method(request, paste, data)