将动态javascript变量作为模板中的url传递 [英] Passing dynamic javascript variable as url in template
问题描述
我正在尝试在 javascript 中创建一个动态 url 以传递给我的 html 模板.
I am trying to create a dynamic url in javascript to pass to my html template.
在我的 js 中,我有:
In my js, I've got:
// dynamic url to edit flashcard
function createDynamicURL()
{
//The variable to be returned
var URL;
//The variables containing the respective IDs
var cardID= cards.cards[current_card].id //this is defined earlier
//Forming the variable to return
URL-="study/[1-9][0-9]/";
URL+="card-edit/";
URL+=cardID;
return URL;
}
在我的模板中,我有:
<a id="edit-button" class="btn btn-default btn-warning" href="javascript:window.location=createDynamicURL();" >Edit</a>
我的 urls.py:
My urls.py:
app_name = 'flash'
urlpatterns = [
re_path(r'^study/(?P<deck_id>[0-9]+)/$', views.study, name='study'),
re_path(r'^study/(?P<deck_id>[0-9]+)/get_cards/$', views.get_cards, name='get-cards'),
path("decks/",views.DeckList.as_view(),name="deck-list"),
path("decks/<int:pk>/",views.DeckDetail.as_view(),name="deck-detail"),
path("cards/<int:pk>/", views.CardList.as_view(), name="flash-list"),
path("card-edit/<int:pk>/",views.CardEdit.as_view(),name="flash-edit"),
path("card-detail/<int:pk>/",views.CardDetail.as_view(),name="flash-detail"),
path("edit/<int:pk>/",views.DeckUpdate.as_view(),name="edit"),
path("",views.home,name="home"),
]
我点击时得到的网址:http://127.0.0.1:8000/%2Fflash/study/33/NaNcard-edit/51
正确的网址应该是:http://127.0.0.1:8000/%2Fflash/card-edit/51/
所以至少它给了我正确的 id.但是为什么它给了我 NaN,我该如何摆脱研究/33?请注意,33 并不总是 33,而且我无法在此处访问该 ID,因此我希望它只是任何 2 位数字.
So at least it is giving me the correct id. But why is it giving me NaN, and how do I get rid of the study/33? Note the 33 will not always be 33, and I don't have access to that id here, so I want it to be just any 2-digit number.
我对 javascript 没有太多经验,所以对基本问题感到抱歉.任何建议将不胜感激!
I don't have a lot of experience with javascript, so sorry for the basic question. Any advice would be greatly appreciated!
研究观点:
@login_required
@ensure_csrf_cookie
def study(request, deck_id):
"""
Study cards page (JS driven)
"""
if request.method == 'GET':
return render(request, 'flash/study.html')
@login_required
@csrf_exempt
def get_cards(request, deck_id):
"""
Get cards to study (ajax)
"""
if request.method == 'GET':
cards = Flashcard.objects.filter(owner=request.user, deck=deck_id,
next_due_date__lte=timezone.now())
count = len(cards)
data = {'count': count, 'cards': []}
num = count if count < CARD_LIMIT else CARD_LIMIT
if num:
# generate list of random indexes
idx = random.sample(range(count), num)
for i in idx:
card = cards[i]
question = '<p>'+'</p><p>'.join(card.question.split('\r\n'))+'</p>'
answer = '<p>'+'</p><p>'.join(card.answer.split('\r\n'))+'</p>'
data['cards'].append({'id': card.pk, 'question': question,
'answer': answer})
return JsonResponse(data)
else:
data = json.loads(str(request.body, 'utf-8'))
for res in data:
card = Flashcard.objects.get(owner=request.user, pk=res['id'])
card.save(rating=res['result'])
return JsonResponse({'status': 'OK'})
推荐答案
如果你的模板中有卡片对象,试试这个:
If you have the card object in your template, Try this :
<a id="edit-button" class="btn btn-default btn-warning" href="{% url 'flash-edit' card.id %}" >Edit</a>
这篇关于将动态javascript变量作为模板中的url传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!