示例#1
0
def post_edit(request, slug):
    if request.user.has_perm('change_post'):
        t = loader.get_template('blog/edit_post.html')
        
        from datetime import datetime
        
        form_errors = [] # list to store form error messages
        
        # if the slug is 'NEW-POST', this is a new post
        if slug == 'NEW-POST':
            post = Post()
            post.slug_for_form = "NEW-POST"
            post.pub_date = datetime.now()
        else:
            try:
               post = Post.objects.get(slug=slug)
               post.slug_for_form = post.slug
            except:       
               post = False

        updated = False

        # if this is a form post, get the posted values 
        if request.POST:

            post.title = request.POST['post_title']
            
            if post.title == '':
                form_errors.append('You must provide a post title')
           
            # get the slug value from the form - if it doesn't 
            # match the value from the URI, it will need to be changed
            post.slug = request.POST['post_slug']
            
            # TODO: check slug doesn't already exist
            
            # create a slug from the post title if there isn't one provided
            if post.slug == '':
                slug = post.title
                slug = slug.replace(' ', '-')
                slug = slug.replace('(', '')
                slug = slug.replace(')', '')
                slug = slug.lower()
                # TODO: run this string through a method to replace all but specified character set.
                post.slug = slug 


            date_string = request.POST['post_pub_date']

            try: 
               post.pub_date = datetime.strptime(date_string, '%d/%m/%Y')
            except:
               form_errors.append('You must provide a valid date in the format dd/mm/yyyy')
   

            post.body = request.POST['post_body']

            # TODO - more validation..
            if len(form_errors) == 0:
                post.save()
                post.slug_for_form = post.slug
                updated = True

            # if the request was made via AJAX - return 1 as a success code
            # TODO: handle failures and pass form errors back as JSON
            if request.is_ajax():
               return HttpResponse('1')

        template_vars = {
           'slug': slug,
           'post' : post,
           'updated' : updated,
           'form_errors' : form_errors
        }
        
        template_vars.update(common_template_vars)

        c = RequestContext(request, template_vars)
        return HttpResponse(t.render(c))
    else:
        return HttpResponse('user not authenticated, or does not have permission to edit the post');