Django URL 基于带空格的字符域?

Posted

技术标签:

【中文标题】Django URL 基于带空格的字符域?【英文标题】:Django URL based off a charfield with spaces? 【发布时间】:2015-08-05 02:42:26 【问题描述】:

我目前有一个基于用户输入的列表名称的 url。列表名称。一切都查询并显示没有问题。但是,当用户输入空格作为列表名称时,浏览器不会很好地处理它。我已经意识到我需要对字符串进行 slugify,但不确定如何进行此实现。我有一些感觉,我在模型中添加了某种 slug 字段,然后查询 slug 字段名称以将其自身与渲染到页面的模型对象关联起来。我只是不确定如何编码。

型号

class newlist(models.Model):
    user = models.ForeignKey(User)
    list_name = models.CharField(max_length = 100,)
    picture = models.ImageField(upload_to='profiles/', default = "/media/profiles/default.jpg")

    def __str__(self):
        return self.list_name

查看

def mylistpage(request, username, listname):


    context = RequestContext(request)
    #make sure that the user is authenticated
    if username == request.user.username:
        #If the user is authenticated, then perform the following functions to the page
        if request.user.is_authenticated():
            #Store the current user request object into a variable
            user = User.objects.get(username=username)

            #Store the list name to the item that starts with the url input
            listname = request.user.newlist_set.filter(list_name__iexact=listname)

            listitems = request.user.newlist_set.all()
            if not listname:
                return redirect('/notfound')
    else:
        return redirect('/notfound')

    return render_to_response('listview.html', 'lista': listname, context)

网址

url(r'^user/(?P<username>\w+)/list/(?P<listname>\w+)/$', mylistpage, name='lists'),

【问题讨论】:

【参考方案1】:

URL 中的空格不是一个好主意。 这个用例是SlugField的典型候选者

slug 是某事物的短标签,仅包含字母、数字、下划线或连字符。它们通常用于 URL 中

所以基本上,在您的模型中,您将添加另一个名为 slug 的字段,并将其传递到 URL。

您可以使用名为 django-autoslug 的现成包来自动生成 slug。

这里有一些帖子可能会提供更多关于蛞蝓的见解:

What is a slug Why SlugField in django

【讨论】:

以上是关于Django URL 基于带空格的字符域?的主要内容,如果未能解决你的问题,请参考以下文章

带空格的字符串无法转换为 NSURL - Mantle

iOS URL带特殊字符(汉字、空格等)导致图片加载失败

thinkphp分页参数带空格的问题

带空格的跨域 301 重定向 URL

URL传参中不能带特殊的字符以及处理方案

编码空格字符的URL:+或%20?