Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理员转义文本_Django_Python 2.7_Django Admin - Fatal编程技术网

Django管理员转义文本

Django管理员转义文本,django,python-2.7,django-admin,Django,Python 2.7,Django Admin,我最近将Django从1.3升级到1.8.18,并且在Django admin中定制预填充表单的链接时遇到问题。例如,我有以下链接: /admin/miscellaneous/whatsnew/add/?title=...%20competition%20results%20uploaded&pub_date=21-04-2017&body=&link= 执行时,表单中的预填充数据如下所示: 应该是这样的: 当直接从Safari中的URL栏进行测试时,按enter键

我最近将Django从1.3升级到1.8.18,并且在Django admin中定制预填充表单的链接时遇到问题。例如,我有以下链接:

/admin/miscellaneous/whatsnew/add/?title=...%20competition%20results%20uploaded&pub_date=21-04-2017&body=&link=
执行时,表单中的预填充数据如下所示:

应该是这样的:

当直接从Safari中的URL栏进行测试时,按enter键后会更改为:

https://flyball.org.au/admin/miscellaneous/whatsnew/add/?title=...%2520competition%2520results%2520uploaded&pub_date=21-04-2017&body=&link=
型号.py

class WhatsNew(models.Model):
    title = models.CharField(max_length=100,help_text='Title, MAX 100 characters.')
    body = models.TextField()
    pub_date = models.DateField()
    message_expiry = models.DateField(default=datetime.date.today() + relativedelta(years=1))
    link = models.URLField(blank=True, null=True)

    class Meta:
        ordering = ['-pub_date']
        verbose_name_plural = "Whats New?"

    def __unicode__(self):
        return self.title
import models
from django.contrib import admin

class WhatsNewAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','message_expiry','link','body')

admin.site.register(models.WhatsNew, WhatsNewAdmin)
admin.py

class WhatsNew(models.Model):
    title = models.CharField(max_length=100,help_text='Title, MAX 100 characters.')
    body = models.TextField()
    pub_date = models.DateField()
    message_expiry = models.DateField(default=datetime.date.today() + relativedelta(years=1))
    link = models.URLField(blank=True, null=True)

    class Meta:
        ordering = ['-pub_date']
        verbose_name_plural = "Whats New?"

    def __unicode__(self):
        return self.title
import models
from django.contrib import admin

class WhatsNewAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','message_expiry','link','body')

admin.site.register(models.WhatsNew, WhatsNewAdmin)

我能做些什么来解决这个问题呢?

因此,我不确定如何在ModelAdmin上执行此操作,但您可以在模型上创建自定义设置器来处理这种情况。下面是如何转义URL编码的字符串:

import urllib


class WhatsNew(models.Model):
    # Field with custom setter
    _title = models.CharField(max_length=100,
                             help_text='Title, MAX 100 characters.',
                             db_column='title')

    body = models.TextField()
    pub_date = models.DateField()
    message_expiry = models.DateField(default=datetime.date.today() + relativedelta(years=1))
    link = models.URLField(blank=True, null=True)

    # Custom getter and setter
    @property
    def title(self):
        return self._title

    @title.setter
    def title(self, value):
        self._title = urllib.unquote(value)

    class Meta:
        ordering = ['-pub_date']
        verbose_name_plural = "Whats New?"

    def __unicode__(self):
        return self._title

使用
+
代替
%20
作为空格,它就可以工作了

您的链接应该类似于:

/admin/miscellaneous/whatsnew/add/?title=...+competition+results+uploaded&pub_date=21-04-2017&body=&link=

您是否也可以显示负责填写此表单的代码,即从查询参数中读取
title
,并将其输入表单?@AKS我在这里不做任何特殊代码,这是Django的一部分,不确定在哪里可以找到它。这对我来说确实有用。我尝试了
%20
,结果在管理表单中显示为空格。@AKS在升级到Django 1.8之前,它也对我有用。这在Django 1.10中对我有用。只是为了好玩,尝试使用
+
而不是
%20
,因为管理员默认会这样做。这很有趣,以前从未见过这样做。我刚刚使用了
+
符号,它似乎已经解决了这个问题。谢谢,我刚刚看到了一些问题,特别是在chrome中,它会阻止您在URL中添加符号并自动为您编码。我想这可能是正在发生的事情,但我想不是!很高兴一切顺利!