[英]Ruby on Rails rendering via an ajax call doesn't work as expected
[英]AJAX call to load 10 more items doesn't work as expected
每次點擊加載更多按鈕時,我正在嘗試加載10個項目。 我最初發送前10個項目並使用dajaxice每次按下按鈕時加載更多10個項目。
這是我的看法
def dj(request, slug):
dj = DJ.objects.get(slug=slug)
dj_song_list = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')[:10]
return render(request, 'hunt/dj.html', {'dj_song_list': dj_song_list, 'slug': slug, 'dj': dj})
這是我的javascript
<script type="text/javascript">
function load() {
Dajaxice.hunt.load_more(Dajax.process, {'items': $("#dj_song_list").find('div').length - 1, 'dj_name': $('.dj_name').text().trim()})
}
</script>
這是我的ajax.py
@dajaxice_register
def load_more(request, items, dj_name=None):
if dj_name:
dj = DJ.objects.get(name=dj_name)
dj_song_list = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')[:items+10]
render = render_to_string('hunt/dj.html', {'dj_song_list': dj_song_list, 'slug': dj.slug, 'dj': dj.name})
dajax = Dajax()
dajax.assign('#edmhunters_body','innerHTML',render)
return dajax.json()
此代碼加載了10首歌曲,但DJ對象未正確傳遞。 我收到以下錯誤
DoesNotExist: DJ matching query does not exist.
在調查中我發現slug在ajax調用中打印正常,但在視圖中它就像hardwell/hunt/img/.jpg
。 它可能與如何回收slug有關。 這是我檢索slug的HTML。
<a href="{% url 'dj' slug=dj.slug %}"><img src="{{ STATIC_URL}}hunt/img/{{ dj.rank }}.jpg"/></a>
為什么slug會在最后追加字符串?
我甚至在視圖中添加了一個代碼來修剪slug的額外字符串,但它仍然沒有按預期工作。 它不會拋出DoesNotExist
錯誤,但仍然沒有傳遞DJ對象。
if slug.endswith('/hunt/img/.jpg'):
slug = slug[:-len('/hunt/img/.jpg')]
這是最初加載的視圖
這是AJAX調用之后的視圖
我究竟做錯了什么? 有沒有更簡單的解決方案?
在一種方法中,您使用slug來查找Dj,而在load_more
您使用的是名稱。 你應該在兩者中使用dj slug我會使用Django分頁來獲取更多的項目而不是傳遞找到的div的數量。
您可以將頁面參數增量發送到負載更多。
@dajaxice_register
def load_more(request, page, dj_slug=None):
if dj_slug:
try:
dj = DJ.objects.get(slug=dj_slug)
except DJ.DoesNotExist:
return None
queryset = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')
paginator = Paginator(queryset)
render = render_to_string('hunt/dj.html', {
'dj_song_page': paginator.page(page),
'slug': dj.slug,
'dj': dj.name
})
dajax = Dajax()
dajax.assign('#edmhunters_body','innerHTML', render)
return dajax.json()
dj_song_page是paginator返回的頁面。 它將包含該頁面的項目。 閱讀有關分頁的django文檔的更多信息: https : //docs.djangoproject.com/en/1.6/topics/pagination/
我認為的主要問題是你必須使用slug而不是名字。 查詢集必須與dj
視圖中的查詢集相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.