我想将已解析的网址插入到字符串中,用作表单字段的help_text
:
class ContactForm(forms.Form):
[...]
email_sender = forms.EmailField(
label="Votre email",
widget=forms.EmailInput(attrs={'disabled': 'disabled'}),
help_text="[...], <a href='{}'>[...]</a>.".format(reverse_lazy('account_email'))
)
但是将反转的URL插入到字符串中是不可能的,因为format
函数(或我尝试的任何连接方式)不是&#34;懒惰&#34;,并且想要立即生成输出。
我收到以下错误:
django.core.exceptions.ImproperlyConfigured: The included urlconf 'myproject.urls' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
例如,使用以下代码可以很好地工作,但不是我想要的:)
email_sender = forms.EmailField(
help_text=reverse_lazy('account_email')
)
那么如何连接一个&#34; lazy&#34;值?
答案 0 :(得分:5)
你不能在Django中连接延迟字符串。实现是非常基本的,它甚至不是实际的懒字符串,它是懒惰的函数调用,它们可能返回其他类型。当你执行reverse_lazy
时,你只会得到一个没有特殊其他行为的惰性函数调用
所以,只要遵守规则。如果您需要延迟计算字符串,请自行创建一个惰性函数:
from django.utils.functional import lazy
def email_sender_help_text():
return "[...], <a href='{}'>[...]</a>.".format(reverse('account_email'))
email_sender_help_text_lazy = lazy(email_sender_help_text, str)
您现在可以使用它:
email_sender = forms.EmailField(
help_text=email_sender_help_text_lazy()
)
或者,对于更通用的版本:
from django.utils.functional import lazy
def format(string, *args, **kwargs):
return string.format(*args, **kwargs)
lazy_format = lazy(format, str)
help_text=lazy_format("<a href='{}'>", reverse_lazy('account_email'))
答案 1 :(得分:1)
在最新版本的django中,有一个名为format_lazy
的实用程序函数:https://docs.djangoproject.com/en/3.0/ref/utils/#django.utils.text.format_lazy