django url如何使用问号? (基于类的视图)

Posted

技术标签:

【中文标题】django url如何使用问号? (基于类的视图)【英文标题】:django url how to use questions mark? (class based views) 【发布时间】:2018-03-25 12:36:53 【问题描述】:

在我的 createview URL 中,我希望有一个“?”,我可以从中将参数传递给 nect 页面。我正在使用基于类的视图。例如:

www.site.com/appname/appointment/add/?Name=1

我的 html 将是:

href=% url 'People:appointment-create' Patient.id %

目前我的网址是这样的:

re_path(r'appointment/add/$', views.appointmentCreate.as_view(), name='appointment-create'),

我的观点是:

class appointmentCreate(LoginRequiredMixin, CreateView):
    model = appointment
    form_class = AppointmentForm

    def get_initial(self):
        patient = self.request.GET.get('patient')
        return 
            'Patient': patient,
        

我该怎么做呢?

【问题讨论】:

【参考方案1】:

你可以试试这样的:

href=% url 'People:appointment-create' %?patient_id= Patient.id 

(所以只需像往常一样在 url 之后传递查询参数)。

此外,如果您想针对此问题提供更通用的解决方案(从查询参数自动生成表单的初始值),请查看有关 CBV 的文章中的 https://spapas.github.io/#configure-the-form-s-initial-values-from-get-parameters 部分。

【讨论】:

【参考方案2】:

下面是基础知识:

首先我想让你知道你刚刚写的下面一行:

% url 'People:appointment-create' Patient.id %

要匹配上面的 url,你需要包含下面的 url:

path(r'appointment/add/<int:patient>', views.appointmentCreate.as_view(), name='appointment-create'),

这是请求参数和 kwargs 之间的区别,在这里您将患者 ID 作为 kwargs 传递并在 self.kwargs 的类基础视图中访问

构造的 url 如下所示:

www.site.com/appname/appointment/add/1/

接下来,如果你想发布请求参数(不需要在你的 urls.py 中添加任何额外的 url),你可以使用如下:

href="% url 'People:appointment-create' %?patient=Patient.id"

请注意,如果您在请求参数中使用名称,则您在此处使用的参数将在视图中可用,那么您需要以self.request.GET.get('name') 访问它,如果您想使用耐心作为请求参数,那么您可以以@987654327 访问它@。

【讨论】:

以上是关于django url如何使用问号? (基于类的视图)的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用 URL 参数在基于类的视图中查询数据库

Django - 基于类的通用视图 - “没有要重定向到的 URL”

Django 基于类的视图上的 success_url 的反向抱怨循环导入

带有 url 问题的基于 Django 类的视图

带有参数的 Django 反向 url 到基于类的视图

django.urls.exceptions.NoReverseMatch 基于类的列表视图