Add Draft support
This commit is contained in:
parent
c468ea92b0
commit
03f646b7fa
|
@ -1,3 +1,12 @@
|
||||||
|
v0.3 (27/05/2014)
|
||||||
|
** User **
|
||||||
|
Add draft support
|
||||||
|
|
||||||
|
** Dev **
|
||||||
|
|
||||||
|
** Bugs **
|
||||||
|
|
||||||
|
|
||||||
v0.2 (27/04/2014)
|
v0.2 (27/04/2014)
|
||||||
|
|
||||||
** User **
|
** User **
|
||||||
|
|
|
@ -38,6 +38,11 @@ class PostForm(ModelForm):
|
||||||
super(PostForm, self).__init__(*args, **kwargs)
|
super(PostForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['category'].choices = [(cat.id, cat.name) for cat in Category.objects.all()]
|
self.fields['category'].choices = [(cat.id, cat.name) for cat in Category.objects.all()]
|
||||||
|
|
||||||
|
class DraftForm(PostForm):
|
||||||
|
class Meta:
|
||||||
|
model = Draft
|
||||||
|
exclude = ('title_slug', 'creation_date', 'modification_date', 'author', 'blog', 'tags', 'content_format', 'published')
|
||||||
|
|
||||||
class CategoryForm(ModelForm):
|
class CategoryForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Category
|
model = Category
|
||||||
|
|
|
@ -253,37 +253,7 @@ class Post(models.Model):
|
||||||
self.title_slug = slugify(self.title)
|
self.title_slug = slugify(self.title)
|
||||||
super(Post, self).save()
|
super(Post, self).save()
|
||||||
|
|
||||||
def createPost(self, content, tags):
|
def manageTags(self, tags):
|
||||||
b = self.blog
|
|
||||||
output = b.src_path
|
|
||||||
if not os.path.exists(output + '/_post'):
|
|
||||||
os.mkdir(output + '/_post')
|
|
||||||
|
|
||||||
filename = output + '/_post/' + str(self.pk)
|
|
||||||
content = unicode(content)
|
|
||||||
content = content.encode('utf-8')
|
|
||||||
modif = True
|
|
||||||
|
|
||||||
if os.path.exists(filename):
|
|
||||||
f = open(filename, 'rb')
|
|
||||||
src_md5 = hashlib.md5()
|
|
||||||
src_md5.update(f.read())
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
dst_md5 = hashlib.md5()
|
|
||||||
dst_md5.update(content)
|
|
||||||
|
|
||||||
if src_md5.digest() == dst_md5.digest():
|
|
||||||
modif = False
|
|
||||||
else:
|
|
||||||
os.unlink(filename)
|
|
||||||
|
|
||||||
if modif:
|
|
||||||
f = open(filename, 'wb')
|
|
||||||
f.write(content)
|
|
||||||
f.close()
|
|
||||||
self.modification_date=datetime.now()
|
|
||||||
|
|
||||||
tags_list = Tag.objects.filter(blog_id=self.blog.id)
|
tags_list = Tag.objects.filter(blog_id=self.blog.id)
|
||||||
my_tags = []
|
my_tags = []
|
||||||
# Create new tags
|
# Create new tags
|
||||||
|
@ -334,6 +304,38 @@ class Post(models.Model):
|
||||||
# print 'Remove ' + t.name_slug
|
# print 'Remove ' + t.name_slug
|
||||||
self.tags.remove(t)
|
self.tags.remove(t)
|
||||||
|
|
||||||
|
def createPost(self, content, tags):
|
||||||
|
b = self.blog
|
||||||
|
output = b.src_path
|
||||||
|
if not os.path.exists(output + '/_post'):
|
||||||
|
os.mkdir(output + '/_post')
|
||||||
|
|
||||||
|
filename = output + '/_post/' + str(self.pk)
|
||||||
|
content = unicode(content)
|
||||||
|
content = content.encode('utf-8')
|
||||||
|
modif = True
|
||||||
|
|
||||||
|
if os.path.exists(filename):
|
||||||
|
f = open(filename, 'rb')
|
||||||
|
src_md5 = hashlib.md5()
|
||||||
|
src_md5.update(f.read())
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
dst_md5 = hashlib.md5()
|
||||||
|
dst_md5.update(content)
|
||||||
|
|
||||||
|
if src_md5.digest() == dst_md5.digest():
|
||||||
|
modif = False
|
||||||
|
else:
|
||||||
|
os.unlink(filename)
|
||||||
|
|
||||||
|
if modif:
|
||||||
|
f = open(filename, 'wb')
|
||||||
|
f.write(content)
|
||||||
|
f.close()
|
||||||
|
self.modification_date=datetime.now()
|
||||||
|
|
||||||
|
self.manageTags(tags)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def remove(self):
|
def remove(self):
|
||||||
|
@ -368,6 +370,53 @@ class Post(models.Model):
|
||||||
else:
|
else:
|
||||||
return 'text'
|
return 'text'
|
||||||
|
|
||||||
|
class Draft(Post):
|
||||||
|
def createDraft(self, content, tags):
|
||||||
|
b = self.blog
|
||||||
|
output = b.src_path
|
||||||
|
if not os.path.exists(output + '/_draft'):
|
||||||
|
os.mkdir(output + '/_draft')
|
||||||
|
|
||||||
|
filename = output + '/_draft/' + str(self.pk)
|
||||||
|
content = unicode(content)
|
||||||
|
content = content.encode('utf-8')
|
||||||
|
modif = True
|
||||||
|
|
||||||
|
if os.path.exists(filename):
|
||||||
|
f = open(filename, 'rb')
|
||||||
|
src_md5 = hashlib.md5()
|
||||||
|
src_md5.update(f.read())
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
dst_md5 = hashlib.md5()
|
||||||
|
dst_md5.update(content)
|
||||||
|
|
||||||
|
if src_md5.digest() == dst_md5.digest():
|
||||||
|
modif = False
|
||||||
|
else:
|
||||||
|
os.unlink(filename)
|
||||||
|
|
||||||
|
if modif:
|
||||||
|
f = open(filename, 'wb')
|
||||||
|
f.write(content)
|
||||||
|
f.close()
|
||||||
|
self.modification_date=datetime.now()
|
||||||
|
|
||||||
|
self.manageTags(tags)
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
def remove(self):
|
||||||
|
b = self.blog
|
||||||
|
|
||||||
|
output = b.src_path
|
||||||
|
filename = output + '/_draft/' + str(self.pk)
|
||||||
|
if os.path.exists(filename):
|
||||||
|
os.unlink(filename)
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
self.published = False
|
||||||
|
super(Draft, self).save()
|
||||||
|
|
||||||
class Comment(models.Model):
|
class Comment(models.Model):
|
||||||
post = models.ForeignKey(Post)
|
post = models.ForeignKey(Post)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True)
|
parent = models.ForeignKey('self', null=True, blank=True)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<dyn:block name="head"/>
|
<dyn:block name="head"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<img id="logo" src="/images/tux_final.png"/>
|
<a href="/"><img id="logo" src="/images/tux_final.png"/></a>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="table-row">
|
<div class="table-row">
|
||||||
<header>
|
<header>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<script type="text/javascript" src="/js/blog.js"> </script>
|
<script type="text/javascript" src="/js/blog.js"> </script>
|
||||||
</head>
|
</head>
|
||||||
<body onLoad="javascript:init();">
|
<body onLoad="javascript:init();">
|
||||||
<img id="logo" src="/images/tux_final.png"/>
|
<a href="/"><img id="logo" src="/images/tux_final.png"/></a>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="table-row">
|
<div class="table-row">
|
||||||
<header>
|
<header>
|
||||||
|
|
|
@ -1,5 +1,23 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ljdc>
|
<ljdc>
|
||||||
|
<entry>
|
||||||
|
<id>85704348740</id>
|
||||||
|
<address>http://lesjoiesducode.fr/post/85704348740/quand-le-client-reclame-une-feature-hors-cahier-des</address>
|
||||||
|
<title>quand le client réclame une feature hors cahier des charges et qu'on lui renvoie en réponse sa facture impayée</title>
|
||||||
|
<img>http://i.imgur.com/3minh1d.gif</img>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<id>72755714066</id>
|
||||||
|
<address>http://lesjoiesducode.fr/post/72755714066/quand-on-me-demande-si-je-veux-relire-la-doc</address>
|
||||||
|
<title>quand on me demande si je veux relire la doc</title>
|
||||||
|
<img>http://ljdchost.com/5jFD7OS.gif</img>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<id>84217503221</id>
|
||||||
|
<address>http://thecodinglove.com/post/84217503221/when-i-have-a-bad-feeling-about-the-project</address>
|
||||||
|
<title>when I have a bad feeling about the project</title>
|
||||||
|
<img>http://i.imgur.com/GMU8de2.gif</img>
|
||||||
|
</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<id>84208887361</id>
|
<id>84208887361</id>
|
||||||
<address>http://thecodinglove.com/post/84208887361/when-the-intern-modifies-my-code</address>
|
<address>http://thecodinglove.com/post/84208887361/when-the-intern-modifies-my-code</address>
|
||||||
|
@ -160,7 +178,7 @@
|
||||||
<id>69485497531</id>
|
<id>69485497531</id>
|
||||||
<address>http://lesjoiesducode.fr/post/69485497531/quand-les-collegues-se-ramassent-sur-un-projet-sur</address>
|
<address>http://lesjoiesducode.fr/post/69485497531/quand-les-collegues-se-ramassent-sur-un-projet-sur</address>
|
||||||
<title>quand les collègues se ramassent sur un projet sur lequel je ne travaille pas</title>
|
<title>quand les collègues se ramassent sur un projet sur lequel je ne travaille pas</title>
|
||||||
<img>http://i.imgur.com/4YwDi.png</img>
|
<img>http://ljdchost.com/FCpwSIk.gif</img>
|
||||||
</entry>
|
</entry>
|
||||||
<entry>
|
<entry>
|
||||||
<id>68966745060</id>
|
<id>68966745060</id>
|
||||||
|
|
|
@ -32,7 +32,7 @@ Available tags:
|
||||||
<textarea id="content" name="content" cols="100" rows="25"></textarea>
|
<textarea id="content" name="content" cols="100" rows="25"></textarea>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br/>
|
<br/>
|
||||||
<input type="submit" name="add" value="Add" /><input type="button" name="preview" value="Preview" onClick="previewPost({{ blog_id }});"/><input type="submit" name="cancel" value="Cancel" />
|
<input type="submit" name="add" value="Add" /><input type="button" name="preview" value="Preview" onClick="previewPost({{ blog_id }});"/><input type="submit" name="draft" value="Save as draft" /><input type="submit" name="cancel" value="Cancel" />
|
||||||
</form>
|
</form>
|
||||||
{% if editor == "html" %}
|
{% if editor == "html" %}
|
||||||
<div id="markdown_help" style="display:none">
|
<div id="markdown_help" style="display:none">
|
||||||
|
|
|
@ -19,10 +19,20 @@
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input name="text"/><input type="submit" name="search" value="Search" />
|
<input name="text"/><input type="submit" name="search" value="Search" />
|
||||||
</form>
|
</form>
|
||||||
|
{% if drafts|length != 0 %}
|
||||||
|
<b>Drafts</b>
|
||||||
|
<table>
|
||||||
|
{% for draft in drafts %}
|
||||||
|
<tr><td><a href="/draft/edit/{{ draft.id }}">{{ draft.id }}</a></td><td>{{ draft.title }}</td><td>{{ draft.creation_date }}</td><td>{{ draft.modification_date }}</td><td><a href="/draft/delete/{{ draft.id }}" onclick="return confirm('Do you really want to delete this item ?')">Delete</a></td></tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table><br/>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if posts|length == 0 %}
|
{% if posts|length == 0 %}
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<b>Any post available</b><br/><br/>
|
<b>Any post available</b><br/><br/>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
<b>Posts</b>
|
||||||
<table>
|
<table>
|
||||||
{% for post in posts %}
|
{% for post in posts %}
|
||||||
{% with post.id as cur_id %}
|
{% with post.id as cur_id %}
|
||||||
|
|
|
@ -44,6 +44,8 @@ urlpatterns = patterns('',
|
||||||
url(r'^post/add/(\d+)$', 'dynastie.views.add_post', name='add_post'),
|
url(r'^post/add/(\d+)$', 'dynastie.views.add_post', name='add_post'),
|
||||||
url(r'^post/edit/(\d+)$', 'dynastie.views.edit_post', name='edit_post'),
|
url(r'^post/edit/(\d+)$', 'dynastie.views.edit_post', name='edit_post'),
|
||||||
url(r'^post/delete/(\d+)$', 'dynastie.views.delete_post', name='delete_post'),
|
url(r'^post/delete/(\d+)$', 'dynastie.views.delete_post', name='delete_post'),
|
||||||
|
url(r'^draft/edit/(\d+)$', 'dynastie.views.edit_draft', name='edit_draft'),
|
||||||
|
url(r'^draft/delete/(\d+)$', 'dynastie.views.delete_draft', name='delete_draft'),
|
||||||
url(r'^generate/(\d+)$', 'dynastie.views.generate', name='generate'),
|
url(r'^generate/(\d+)$', 'dynastie.views.generate', name='generate'),
|
||||||
url(r'^preview/(\d+)$', 'dynastie.views.preview', name='preview'),
|
url(r'^preview/(\d+)$', 'dynastie.views.preview', name='preview'),
|
||||||
url(r'^tinyMCEExternalList/post/add/(\d+)$', 'dynastie.views.tinymcelist_add', name='tinymce'),
|
url(r'^tinyMCEExternalList/post/add/(\d+)$', 'dynastie.views.tinymcelist_add', name='tinymce'),
|
||||||
|
|
|
@ -46,7 +46,7 @@ def hash(object, attr):
|
||||||
value = None
|
value = None
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False):
|
def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False, cls=Post):
|
||||||
b = None
|
b = None
|
||||||
p = None
|
p = None
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False):
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
if not post_id is None:
|
if not post_id is None:
|
||||||
p = Post.objects.get(pk=post_id)
|
p = cls.objects.get(pk=post_id)
|
||||||
|
|
||||||
if p is None:
|
if p is None:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
@ -346,9 +346,8 @@ def add_blog(request):
|
||||||
def view_blog(request, blog_id):
|
def view_blog(request, blog_id):
|
||||||
b,_ = have_I_right(request, blog_id)
|
b,_ = have_I_right(request, blog_id)
|
||||||
|
|
||||||
posts = Post.objects.filter(blog=b)
|
orig_posts = Post.objects.filter(blog=b)
|
||||||
count = posts.count()
|
|
||||||
nb_pages = int(count/50)
|
|
||||||
if 'page' in request.GET:
|
if 'page' in request.GET:
|
||||||
cur_page = int(request.GET['page'])
|
cur_page = int(request.GET['page'])
|
||||||
else:
|
else:
|
||||||
|
@ -357,6 +356,14 @@ def view_blog(request, blog_id):
|
||||||
else:
|
else:
|
||||||
cur_page = 0
|
cur_page = 0
|
||||||
|
|
||||||
|
if cur_page <= 0:
|
||||||
|
drafts = Draft.objects.filter(blog=b)
|
||||||
|
else:
|
||||||
|
drafts = []
|
||||||
|
|
||||||
|
count = orig_posts.count() - drafts.count()
|
||||||
|
nb_pages = int(count/50)
|
||||||
|
|
||||||
# Prevent error injection
|
# Prevent error injection
|
||||||
if cur_page < 0 : cur_page = 0
|
if cur_page < 0 : cur_page = 0
|
||||||
if cur_page > nb_pages : cur_page = nb_pages-1
|
if cur_page > nb_pages : cur_page = nb_pages-1
|
||||||
|
@ -364,9 +371,19 @@ def view_blog(request, blog_id):
|
||||||
request.session['cur_page'] = cur_page
|
request.session['cur_page'] = cur_page
|
||||||
|
|
||||||
start = cur_page * 50
|
start = cur_page * 50
|
||||||
end = start + 50
|
end = start + 50 + drafts.count()
|
||||||
|
|
||||||
|
orig_posts = orig_posts.order_by('-creation_date')[start:end]
|
||||||
|
posts = []
|
||||||
|
for p in orig_posts:
|
||||||
|
found = False
|
||||||
|
for d in drafts:
|
||||||
|
if d.id == p.id:
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
posts.append(p)
|
||||||
|
|
||||||
posts = posts.order_by('-creation_date')[start:end]
|
|
||||||
form = BlogForm(instance=b)
|
form = BlogForm(instance=b)
|
||||||
|
|
||||||
comments = Comment.objects.all()
|
comments = Comment.objects.all()
|
||||||
|
@ -380,7 +397,7 @@ def view_blog(request, blog_id):
|
||||||
|
|
||||||
navigation_bar = createNavigationBar(b.id, cur_page, nb_pages)
|
navigation_bar = createNavigationBar(b.id, cur_page, nb_pages)
|
||||||
|
|
||||||
c = {'blog' : b, 'posts' : posts, 'form' : form, 'comments' : dict_comments, 'navigation_bar' : navigation_bar}
|
c = {'blog' : b, 'posts' : posts, 'drafts' : drafts, 'form' : form, 'comments' : dict_comments, 'navigation_bar' : navigation_bar}
|
||||||
|
|
||||||
return render(request, 'view_blog.html', c)
|
return render(request, 'view_blog.html', c)
|
||||||
|
|
||||||
|
@ -473,6 +490,20 @@ def add_post(request, blog_id):
|
||||||
s.index_post(b, form.id)
|
s.index_post(b, form.id)
|
||||||
request.session['cur_page'] = 0
|
request.session['cur_page'] = 0
|
||||||
return HttpResponseRedirect('/blog/' + blog_id)
|
return HttpResponseRedirect('/blog/' + blog_id)
|
||||||
|
|
||||||
|
elif 'draft' in request.POST:
|
||||||
|
content_format = Post.CONTENT_HTML
|
||||||
|
if request.POST['editor'] == 'text':
|
||||||
|
content_format = Post.CONTENT_TEXT
|
||||||
|
draft = Draft(blog=Blog.objects.get(pk=blog_id), author=User.objects.get(pk=request.user.id), creation_date=datetime.now(), modification_date=datetime.now(), content_format=content_format, published=False)
|
||||||
|
content = request.POST['content']
|
||||||
|
# del request.POST['content']
|
||||||
|
form = DraftForm(request.POST, instance=draft)
|
||||||
|
if form.is_valid():
|
||||||
|
form = form.save()
|
||||||
|
form.createDraft(content, request.POST['text_tags'])
|
||||||
|
request.session['cur_page'] = 0
|
||||||
|
return HttpResponseRedirect('/blog/' + blog_id)
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect('/blog/' + blog_id)
|
return HttpResponseRedirect('/blog/' + blog_id)
|
||||||
else:
|
else:
|
||||||
|
@ -532,6 +563,63 @@ def edit_post(request, post_id):
|
||||||
'editor' : post.get_editor()
|
'editor' : post.get_editor()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def edit_draft(request, draft_id):
|
||||||
|
(b, draft) = have_I_right(request, None, draft_id, cls=Draft)
|
||||||
|
|
||||||
|
title = draft.title
|
||||||
|
blog_id = b.id
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
if 'edit' in request.POST:
|
||||||
|
content_format = Post.CONTENT_HTML
|
||||||
|
if request.POST['editor'] == 'text':
|
||||||
|
content_format = Post.CONTENT_TEXT
|
||||||
|
draft.content_format = content_format
|
||||||
|
form = DraftForm(request.POST, instance=draft)
|
||||||
|
if form.is_valid():
|
||||||
|
if title != request.POST['title']:
|
||||||
|
draft.remove()
|
||||||
|
form.save()
|
||||||
|
draft.createDraft(request.POST['content'], request.POST['text_tags'])
|
||||||
|
return HttpResponseRedirect('/blog/' + str(blog_id))
|
||||||
|
elif 'post' in request.POST:
|
||||||
|
content_format = Post.CONTENT_HTML
|
||||||
|
if request.POST['editor'] == 'text':
|
||||||
|
content_format = Post.CONTENT_TEXT
|
||||||
|
post = Post(blog=Blog.objects.get(pk=blog_id), author=User.objects.get(pk=request.user.id), creation_date=datetime.now(), modification_date=datetime.now(), content_format=content_format)
|
||||||
|
content = request.POST['content']
|
||||||
|
# del request.POST['content']
|
||||||
|
form = PostForm(request.POST, instance=post)
|
||||||
|
if form.is_valid():
|
||||||
|
draft.delete()
|
||||||
|
form = form.save()
|
||||||
|
form.createPost(content, request.POST['text_tags'])
|
||||||
|
s = Search()
|
||||||
|
s.index_post(b, form.id)
|
||||||
|
request.session['cur_page'] = 0
|
||||||
|
return HttpResponseRedirect('/blog/' + str(blog_id))
|
||||||
|
else:
|
||||||
|
if 'cancel' in request.POST:
|
||||||
|
return HttpResponseRedirect('/blog/' + str(blog_id))
|
||||||
|
else:
|
||||||
|
form = PostForm(instance=draft, initial={'text_tags':', '.join((tag.name) for tag in draft.tags.all())})
|
||||||
|
|
||||||
|
filename = b.src_path + '/_draft/' + str(draft.pk)
|
||||||
|
if os.path.exists(filename):
|
||||||
|
f = open(filename, 'rb')
|
||||||
|
content = f.read()
|
||||||
|
f.close()
|
||||||
|
else:
|
||||||
|
content = 'Empty draft'
|
||||||
|
|
||||||
|
return render(request, 'edit_draft.html', {
|
||||||
|
'form': form, 'draft_id' : draft_id, 'content' : content,
|
||||||
|
'blog_id' : blog_id,
|
||||||
|
'all_tags' : Tag.objects.all(),
|
||||||
|
'editor' : draft.get_editor()
|
||||||
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def delete_post(request, post_id):
|
def delete_post(request, post_id):
|
||||||
(b, post) = have_I_right(request, None, post_id)
|
(b, post) = have_I_right(request, None, post_id)
|
||||||
|
@ -543,6 +631,14 @@ def delete_post(request, post_id):
|
||||||
|
|
||||||
return HttpResponseRedirect('/blog/' + str(b.id))
|
return HttpResponseRedirect('/blog/' + str(b.id))
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def delete_draft(request, draft_id):
|
||||||
|
(b, draft) = have_I_right(request, None, draft_id, cls=Draft)
|
||||||
|
|
||||||
|
draft.delete()
|
||||||
|
|
||||||
|
return HttpResponseRedirect('/blog/' + str(b.id))
|
||||||
|
|
||||||
def _generate(request, blog_id, report):
|
def _generate(request, blog_id, report):
|
||||||
b,_ = have_I_right(request, blog_id)
|
b,_ = have_I_right(request, blog_id)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user