【问题标题】:Redirect an URL once successful成功后重定向 URL
【发布时间】: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&lt;clientcode&gt;[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


【解决方案1】:

这是一个示例,说明如何覆盖 get_success_url()。你没有提供视图类的实现,所以我假设它是一个标准的FormView

 class OrderFormView(FormView):

    def form_valid(self, form):
        # form handling logic
        super(OrderFormView, self).form_valid(form)

    def get_success_url(self):
        clientcode = self.kwargs['clientcode']
        url = '/' + clientcode + '/dashboard/'
        return url

您可以参考 Django 文档了解详细信息。

【讨论】:

  • 你确定它与 django 1.7 兼容吗?你能适应我的课吗?几分钟前我更新了我的问题。
  • 我需要摆脱HttpResponseRedirect吗?
  • 好的,我知道了。
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2015-08-23
  • 2016-12-16
  • 1970-01-01
相关资源
最近更新 更多