在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
})
希望这会有所帮助。我传递了多个参数,但是,我可能做错了。
答案 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';}]);