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

时间:2018-03-25 12:36:54

标签: django django-templates django-views

在我的createview网址中,我希望有一个'?',从那里我可以将参数传递给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,
        }

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

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

(所以只需在url之后传递查询参数)。

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

答案 1 :(得分:1)

所以这是基础知识:

首先,我想告诉您刚才写的以下内容:

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

要匹配上面的网址,您需要包含以下网址:

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

这是请求参数和kwargs之间的区别,您将患者ID作为kwargs传递,并在self.kwargs

中的类基本视图中进行访问

构建的网址如下所示:

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

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

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

请注意,如果您在请求参数中使用名称,则此处使用的参数将在视图中可用,然后您需要将其作为self.request.GET.get('name')访问,如果您想将患者用作请求参数,则可以将其作为self.request.GET.get('patient')