2012-05-08 3 views
1

Я новичок в форматах Google App Engine и Django. Я получаю ошибку кодирования, когда я пытаюсь выполнить следующий код:Как исправить эту ошибку кодирования в Google App Engine

import webapp2 
from google.appengine.ext import db 
from google.appengine.ext.webapp import template 

from django import newforms as forms 
from google.appengine.ext.db import djangoforms 

import os 
import re 

import fix_path 
import config 
import static 

def slugify(s): 
    return re.sub('[^a-zA-Z0-9-]+', '-', s).strip('-') 

def format_post_path(post, num): 
    slug = slugify(post.title) 
    if num > 0: 
     slug += "-" + str(num) 
    return config.post_path_format % { 
     'slug': slug, 
     'year': post.published.year, 
     'month': post.published.month, 
     'day': post.published.day, 
    } 

def render_template(template_name, template_vals=None, theme=None): 
    template_path = os.path.join("themes", theme or config.theme, template_name) 
    return template.render(template_path, template_vals or {}) 

class BlogPost(db.Model): 
    # The url path to the blog post. Posts have a path if they are published. 
    path = db.StringProperty() 
    title = db.StringProperty(required=True, Indexed=False) 
    body = db.TextProperty(required=True) 
    published = db.DateTimeProperty(auto_now_add=True) 
    updated = db.DateTimeProperty(auto_now=True) 

def render(self): 
    template_vals = { 
     'config': config, 
     'post': self, 
    } 
    return render_template("post.html", template_vals) 

def publish(self): 
    rendered = self.render() 
    if not self.path: 
     num = 0 
     content = None 
     while not content: 
      path = format_post_path(self, num) 
      content = static.add(path, rendered, "text/html") 
      num += 1 
     self.path = path 
     self.put() 
    else: 
     static.set(self.path, rendered, "text/html") 

class PostForm(djangoforms.ModelForm): 
    class Meta: 
     model = BlogPost 
     exclude = ['path', 'published', 'update'] 

class PostHandler(webapp2.RequestHandler) 
    def render_to_response(self, template_name, template_vals=None, theme=None): 
     template_name = os.path.join("admin", template_name) 
     self.response.out.write(render_template(template_name, template_vals, theme)) 

    def render_form(self, form): 
     self.render_to_response("edit.html", {'form': form}) 

    def get(self): 
     self.render_form(PostForm()) 

    def post(self) 
     form = PostForm(date=self.request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.publish() 
      self.render_to_response("published.html", {'post': post}) 
     else: 
      self.render_form(form) 

app = webapp2.WSGIApplication([('/admin/newpost', PostHandler)], 
           debug=True) 

Здесь находится трассировка.

ERROR 2012-05-08 10:35:03,609 cgi.py:121] Traceback (most recent call last): 
     File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 676, in Decorate 
     return func(self, *args, **kwargs) 
     File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 1911, in get_code 
     source_code.decode(encoding) 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) 

INFO  2012-05-08 10:35:03,627 dev_appserver.py:2891] "GET /admin/newpost HTTP/1.1" 500 - 

След не дает мне достаточной информации, чтобы исправить эту проблему. Есть идеи?

+0

Вы уверены, что это весь трафик? – aschmid00

ответ

1

Когда у меня возникла проблема с appengine, я смог очистить все свои данные до unicode/utf-8, а затем сработал.

Некоторые из ваших данных не являются unicode/utf-8. У меня была эта проблема в нескольких случаях с GAE, и это всегда данные, а не исходный код, который каким-то образом не является unicode.

Если вы проверите данные и/или исходное форматирование и установите все в utf-8/unicode, он будет работать. Может показаться, что вы уже установили все в utf-8, но если вы все еще получаете эту ошибку, это означает, что какая-то строка или тому подобное - это еще одна кодировка, чем utf-8.

+0

Да, это я. Таковы опасности смешивания python 2.5 с кодом 2.7. – Busilinks

Смежные вопросы