我正在尝试使用自定义Baseconverter来确保我的网址“干净”。我终于按照以下方式开始工作:
我的init.py
是:
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
from flask.ext.openid import OpenID
from config import basedir
from slugify import slugify
app = Flask(__name__)
from werkzeug.routing import BaseConverter
class MyStringConverter(BaseConverter):
def to_python(self, value):
return value
def to_url(self, values):
return slugify(values)
app.url_map.converters['mystring'] = MyStringConverter
app.config.from_object('config')
db = SQLAlchemy(app)
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
oid = OpenID(app, os.path.join(basedir, 'tmp'))
from app import views, models
但是,如果我定义MyStringConverter
类并在文件末尾添加app.url_map.converters['mystring'] = MyStringConverter
,则会出现LookupError: the converter 'mystring' does not exist
错误。这是为什么?
这是清理我的网址的正确方法吗?我不确定我是否需要对to_python()
方法做任何事情,或者我是否以正确的方式进行此操作。