【发布时间】:2018-05-28 17:03:02
【问题描述】:
import re
DEFAULT_SUCCESS_URL = re.compile(r'^(?P<clientcode>[0-9]{9})/dashboard/')
url(r'^(?P<clientcode>[0-9]{9})/order/$',
OrderFormView.as_view(success_url=settings.DEFAULT_SUCCESS_URL),
name='zoneclient-order'),
到目前为止,由于以下错误,该技术不起作用:
TypeError: unsupported operand type(s) for %: '_sre.SRE_Pattern' and 'dict'
事实上,我希望success_url 是
# Dashboard
url(r'^(?P<clientcode>[0-9]{9})/dashboard/', login_required(
DashboardView.as_view()), name='zoneclient-dashboard'),
如何修改顶部代码以与r'^(?P<clientcode>[0-9]{9})/dashboard/' 一起使用?
P.S.请注意,我正在使用 Django 1.7 并且多次使用 DEFAULT_SUCCESS_URL。
更新
class OrderFormView(CustomerViewMixin, CreateView, SendTextEmailMixin):
template_name = 'zoneclient/order-form.html'
form_class = OrderForm
email_subject_template = 'zoneclient/emails/order_form_subject.txt'
email_body_template = 'zoneclient/emails/order_form_body.txt'
email_recipients = settings.EMAIL_NOTIFY_ORDERS
def get_form(self, form_class):
kwargs = self.get_form_kwargs()
kwargs['user'] = self.get_customer()
return form_class(**kwargs)
def form_valid(self, form):
self.object = form.save()
self.send_email()
log.info('%s\' order #%d was successufully processed.' % (\
usr(self.request), self.object.id))
messages.success(
self.request,
_('Your order has been placed, thank you!'),
fail_silently=True)
return HttpResponseRedirect(self.get_success_url())
def get_email_context(self):
context = super(OrderFormView, self).get_email_context()
context['user'] = self.get_customer()
context['object'] = self.object
return context
【问题讨论】:
-
@phd 两个问题:你抽什么烟?我可以来点吗?
-
@gitblame 你对这个问题有什么建议吗?
-
成功 url 应解析为字符串。在你的例子中,它没有。
-
如果你能给出完整的答案,我会接受。如何将其转换为字符串?
-
无论如何,当您定义了相应的视图时,您不应该弄乱
url。您可以在视图类中覆盖get_success_url。它将视图逻辑整合到一个地方并使调试更容易。
标签: python django url redirect