Django - 从用户输入中获取并在特定位置创建链接?
这是我的 models.py 文件:
class Post(models.Model):
actualPost = models.CharField(max_length=200)
这是我的 forms.py 文件:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['actualPost']
widgets = { 'actualPost' : forms.Textarea(attrs={'maxlength':200}) }
这是我的 views.py 文件:
def createPostView(request):
if request.method=='POST':
form = PostForm(request.POST)
if form.is_valid():
stringPost = form.cleaned_data['actualPost'] #I'm assuming stringPost will now be the string version of the users input
findLinks(stringPost)
newPost = Post(actualPost = form.cleaned_data['actualPost'])
简单来说,在视图中,我获取用户输入的字符串后,我打算把这个字符串传给一个叫做 findLinks 的函数。这个 findLinks 函数是这样的:
def findLinks(postString):
word = ''
totalLength = len(postString)
for i in postString:
if i=='@': #basically, I want anything after an '@' sign to be a link..
#so if the post is "Go to @www.google.com to search for anything"
#I want www.google.com to be a link
indexOfSign = postString.index(i)
while ((indexOfSign != totalLength-1) and (postString[indexOfSign+1] != '')):
word += htmlString[indexOfSign+1]
indexOfSign += 1
return word
这个函数会返回 '@' 符号后面的单词。那么现在问题是,如何安全地把这个单词变成一个链接,这样当我把帖子放到模板中时,查看模板时 '@' 符号后面的单词就会显示为链接呢?
我想到的一种可能的方法是在 Python 函数中,基本上返回帖子字符串的版本,只不过把 '@' 符号后面的单词用 "" 和 "" 包裹起来,但这样做不行,因为出于安全原因,Django 会把用户输入当作原始字符串处理,而不是代码,对吧?
我不想强迫 Django 把帖子当作代码来处理,因为那样会导致安全问题。有没有什么方法可以安全地将用户输入保存到数据库中,并在模板中把所有 '@' 符号后面的单词变成链接呢?
1 个回答
1
这样来声明一个类的方法:
class Post(models.Model):
actualPost = models.CharField(max_length=200)
def get_link(self):
if self.actualPost and '@' in self.actualPost:
return self.actualPost.split('@', 1)[1]
return None
然后在模板中使用:
{% for post in post_list %}
{% if post.get_link %}
<a href="/{{ post.get_link }}/">Blah </a>
{% endif %}
{% endfor %}