comparison apps/snippet/views.py @ 133:ba51d3b7740b

Add ability to upload a file to create a snippet If a file is specified, the contents of that file are used in preference to the contents of the 'content' text box.
author dellsystem <ilostwaldo@gmail.com>
date Sat, 22 Sep 2012 12:20:24 -0400
parents 4f6977515048
children 3a850f49eea6
comparison
equal deleted inserted replaced
132:4f6977515048 133:ba51d3b7740b
1 import difflib 1 import difflib
2 2
3 from django.shortcuts import render_to_response, \ 3 from django.shortcuts import render_to_response, \
4 get_object_or_404, get_list_or_404, render 4 get_object_or_404, get_list_or_404, render, redirect
5 from django.template.context \ 5 from django.template.context \
6 import RequestContext 6 import RequestContext
7 from django.http \ 7 from django.http \
8 import HttpResponseRedirect, HttpResponseBadRequest, \ 8 import HttpResponseRedirect, HttpResponseBadRequest, \
9 HttpResponse, HttpResponseForbidden 9 HttpResponse, HttpResponseForbidden
26 } 26 }
27 27
28 return render(request, 'snippet/explore.html', context) 28 return render(request, 'snippet/explore.html', context)
29 29
30 30
31 def snippet_new(request, template_name='snippet/snippet_new.djhtml'): 31 def snippet_new(request):
32
33 if request.method == "POST": 32 if request.method == "POST":
34 snippet = Snippet() 33 snippet = Snippet()
35 try: 34
35 if request.user.is_authenticated():
36 snippet.author = request.user 36 snippet.author = request.user
37 except: 37
38 pass 38 snippet_form = SnippetForm(request.POST,
39 snippet_form = SnippetForm(data=request.POST, request=request, 39 request.FILES,
40 request=request,
40 instance=snippet) 41 instance=snippet)
42
41 if snippet_form.is_valid(): 43 if snippet_form.is_valid():
42 request, new_snippet = snippet_form.save() 44 request, new_snippet = snippet_form.save()
43 return HttpResponseRedirect(new_snippet.get_absolute_url()) 45 return redirect(new_snippet)
44 else: 46 else:
45 snippet_form = SnippetForm(request=request) 47 snippet_form = SnippetForm(request=request)
46 48
47 recent = Snippet.objects.all()[:10] 49 recent = Snippet.objects.all()[:10]
48 50
49 template_context = { 51 context = {
50 'snippet_form': snippet_form, 52 'snippet_form': snippet_form,
51 'recent_snippets' : recent, 53 'recent_snippets' : recent,
52 } 54 }
53 55
54 return render_to_response( 56 return render(request, 'snippet/snippet_new.djhtml', context)
55 template_name,
56 template_context,
57 RequestContext(request)
58 )
59 57
60 58
61 def snippet_details(request, snippet_id, 59 def snippet_details(request, snippet_id,
62 template_name='snippet/snippet_details.djhtml',
63 is_raw=False): 60 is_raw=False):
64
65 snippet = get_object_or_404(Snippet, secret_id=snippet_id) 61 snippet = get_object_or_404(Snippet, secret_id=snippet_id)
66 snippet.num_views += 1 62 snippet.num_views += 1
67 snippet.save() 63 snippet.save()
68 64
69 tree = snippet.get_root() 65 tree = snippet.get_root()
74 'lexer': snippet.lexer, 70 'lexer': snippet.lexer,
75 'title': 'Re: %s' % snippet.title, 71 'title': 'Re: %s' % snippet.title,
76 } 72 }
77 73
78 if request.method == "POST": 74 if request.method == "POST":
79 snippet_form = SnippetForm(data=request.POST, 75 snippet_form = SnippetForm(request.POST,
76 request.FILES,
80 request=request, 77 request=request,
81 initial=new_snippet_initial) 78 initial=new_snippet_initial)
82 if snippet_form.is_valid(): 79 if snippet_form.is_valid():
83 request, new_snippet = snippet_form.save(parent=snippet) 80 request, new_snippet = snippet_form.save(parent=snippet)
84 return HttpResponseRedirect(new_snippet.get_absolute_url()) 81 return redirect(new_snippet)
85 else: 82 else:
86 snippet_form = SnippetForm(initial=new_snippet_initial, 83 snippet_form = SnippetForm(initial=new_snippet_initial,
87 request=request) 84 request=request)
88 85
89 if request.user.is_authenticated(): 86 if request.user.is_authenticated():
90 default_pygments_style = request.user.get_profile().pygments_style 87 default_pygments_style = request.user.get_profile().pygments_style
91 else: 88 else:
92 default_pygments_style = PygmentsStyle.objects.get(pk=1) 89 default_pygments_style = PygmentsStyle.objects.get(pk=1)
93 90
94 template_context = { 91 context = {
95 'snippet_form': snippet_form, 92 'snippet_form': snippet_form,
96 'snippet': snippet, 93 'snippet': snippet,
97 'lines': range(snippet.get_linecount()), 94 'lines': range(snippet.get_linecount()),
98 'tree': tree, 95 'tree': tree,
99 'language': dict(LEXER_LIST)[snippet.lexer], 96 'language': dict(LEXER_LIST)[snippet.lexer],
100 'pygments_styles': PygmentsStyle.objects.all(), 97 'pygments_styles': PygmentsStyle.objects.all(),
101 'default_style': default_pygments_style, 98 'default_style': default_pygments_style,
102 'no_descendants': len(tree) == 1, 99 'no_descendants': len(tree) == 1,
103 } 100 }
104 101
105 response = render_to_response( 102 response = render(request, 'snippet/snippet_details.djhtml', context)
106 template_name,
107 template_context,
108 RequestContext(request)
109 )
110 103
111 if is_raw: 104 if is_raw:
112 response['Content-Type'] = 'text/plain' 105 response['Content-Type'] = 'text/plain'
113 return response 106 return response
114 else: 107 else: