我有一个问题,Jinja正在处理一个变量,我将它作为文字字符串传递给它,这搞砸了Flask完成的URL路由工作。
app.py
- 每个&#34;课程&#34;有指定的网址,如/course/<name>
所示。
@app.route("/course/<name>")
@login_required
def course(name):
collection = mongo.db.courses
course = collection.find_one({"name": name})
return render_template("course.html", course=course)
profile.html
- 这些&#34;课程&#34;将显示在profile.html
页面上,并且应该有href
个标记,以便将其引导至相应呈现的course.html
页面。
尝试#1 :我尝试将{{ course }}
传入name
参数,但是当Jinja将其视为一个字符串时,网址被搞砸了。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
<a href="{{ url_for('course', name='{{ course }} }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
尝试#2 :我尝试设置一个Jinja变量并将其传递给href
标记,但这不起作用。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
{% set url = url_for('course', name="{{ course }}") %}
<a href="{{ url }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
如何在不让Jinja将href
标记视为文字字符串的情况下为每个course
变量动态生成新的href
标记?
答案 0 :(得分:2)
$scope.uploadFile = function (file) {
console.log("hitting file upload", $scope.selectedBridge);
if (file) {
debugger;
var request = {
method: 'POST',
url: '/api/Bridge/UploadBridgeImage',
data: angular.toJson($scope.selectedBridge.BridgeID),
file: file,
headers: { 'Content-Type': undefined }
};
Upload.upload(request).then(function (response) {
});
}
}
开始一段Python代码。你在里面做的事情遵循Python行为规则,而不是Jinja的规则。您将[HttpPost]
[Route("api/Bridge/UploadBridgeImage")]
public IHttpActionResult UploadBridgeImage()
{
try
{
var uploadedFiles = HttpContext.Current.Request.Files;
for (int i = 0; i < uploadedFiles.Count; i++)
{
var fileToSave = uploadedFiles[i];
var fileBytes = _iStremHelper.GetBytes(fileToSave.InputStream, fileToSave.ContentLength);
var file = BridgeFileEntity(fileBytes, fileToSave, 1);
using (_iFileRepository)
{
_iFileRepository.Save(file);
}
}
return Ok();
}
catch (Exception ex)
{
return InternalServerError();
}
}
的值{{
传递给{{ course }}
。只需使用name
作为变量即可。
url_for