如何在urls.py中传递查询字符串?key = value&在django

时间:2017-01-25 20:14:10

标签: python angularjs django query-string django-urls

在django文档中注意到:

  

现在,在网络上,您可能会遇到诸如“ME2 / Sites / dirmod.asp?sid =& type = gen& mod = Core + Pages& gid = A6CD4967199A42D9B65B1B”之类的美女。您会很高兴地知道Django允许我们提供比这更优雅的URL模式。

但是,我正在尝试使用此模式传递查询字符串。如何将关键=值对传递到django的内部urls.py

另请注意,这适用于同时使用Angular和Django的项目。

目前我的角度模式是在查询字符串中出现的 I.E. http://localhost/data/?key1=value1&key2=value2

如果您有关于如何处理$ http.post的任何进一步细节,我会接受任何建议。

更新:

这是我的VIEWS.PY

#THREE PARAMETERS: storyElementName, facet, variants(can be multiple)
def storyElements_getOrCreate(request, storyElementName, facet, variants):
contData = lsContinuityData.ContinuityData()
if request.method == "POST":
    storyElementName = request.POST.get("storyElementName")
    facet = request.POST.get("facet")
    for key in request.POST:
        variants = request.POST.getlist("variants")
    storyElement = contData.storyElement(storyElementName, facet=facet, variants=variants)
    return HttpResponse(json.dumps(storyElementName, facet, variants), content_type="application/json")
else:
    storyElementGroups = contData.getStoryElements()
    if len(storyElementGroups):
        storyElements = [storyElement.toJSON() for storyElement in storyElementGroups]
        return HttpResponse(json.dumps(storyElements), content_type="application/json")

这是我的角度控制器

function addStoryElement(storyElementName, facet, variants){
    seParams = {storyElementName: vm.storyElementName, facet: vm.facet, variants: vm.variants}
    $http({
        url: 'http://localhost:8000/lsContinuity/storyelements/',
        method: "POST",
        params: seParams
    })

希望这会有所帮助。我传递了多个参数,但是,我可能做错了。

3 个答案:

答案 0 :(得分:0)

您可以在任何已定义的网址上执行此操作。

因此,在与http://localhost/data/对应的视图中,让我们说DataView(假设是CBV):

class DataView(View):

    def get(self, request, *args, **kwargs):

        # To get key=value params
        params = request.GET  # This should return a dict {'key': 'value'}

答案 1 :(得分:0)

我认为,在Django的精神中,更好的选择是让你的网址在你的urls.py中拥有这种模式。

url(r'^data/?P<val1>\d+/?P<val2>\d+$', 'Project.views.my_project.page', name="my_project")

然后您可以检索视图中的值,如下所示

def page(request, val1, val2):
    record1 = MyModel.objects.get(key1=val1)
    record2 = MyModel.objects.get(key2=val2)

    ...

d+会收到一个或多个十进制数字。

您的网址将具有如此传递的值

http://localhost/data/val1/val2

答案 2 :(得分:0)

我意识到出了什么问题。

使用$ http的POST从AngularJs发送数据时,它会将带有content-type =“application / json”的数据发送到服务器。 Django不理解这种格式。

解决方案是使用以下配置更改内容类型标头:

    app.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';}]);