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, "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={ "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)