From c678b32a0ab30906d72f18cf24ba0d2d7ee151f7 Mon Sep 17 00:00:00 2001 From: nkotiukadmin Date: Sun, 27 Mar 2016 21:56:41 +0300 Subject: [PATCH] Add some docs with some local changes --- accounts/admin.py | 7 +++- accounts/admin_urls.py | 4 ++- accounts/urls.py | 2 +- docs/documentation.docx | Bin 0 -> 27652 bytes exposition/admin.py | 3 +- exposition/forms.py | 3 ++ proj/settings.py | 2 +- proj/urls.py | 31 ++++++++++-------- .../admin/accounts/user_confirm_delete.html | 9 +++++ templates/admin/accounts/user_list.html | 3 ++ templates/admin/exposition/exposition.html | 7 ++++ .../admin/newsletters/newsletter_list.html | 2 +- templates/client/includes/header.html | 25 +++++++++++++- 13 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 docs/documentation.docx create mode 100644 templates/admin/accounts/user_confirm_delete.html diff --git a/accounts/admin.py b/accounts/admin.py index 9457de21..c57134a5 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -13,9 +13,14 @@ from django.utils.translation import ugettext as _ from models import User from forms import UserForm, UserCreationForm, ChangePasswordForm, EmailAnnouncementForm, UserFilterForm #custom views -from django.views.generic import UpdateView +from django.views.generic import UpdateView, DeleteView from functions.admin_views import AdminView, AdminListView, paginate_results + +class DeleteAccount(DeleteView): + model = User + success_url = '/admin/accounts/all/' + class UserListView(AdminListView): template_name = 'admin/accounts/user_list.html' form_class = UserFilterForm diff --git a/accounts/admin_urls.py b/accounts/admin_urls.py index 66e92a22..44034040 100644 --- a/accounts/admin_urls.py +++ b/accounts/admin_urls.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, url -from admin import UserListView, EditUser +from admin import UserListView, EditUser, DeleteAccount urlpatterns = patterns('', url(r'^change/(?P.*)/$', 'accounts.admin.user_change'), url(r'^all/$', UserListView.as_view()), url(r'^reset_password_email/$', 'accounts.admin.reset_password_email'), + url(r'^delete/(?P.*)/$', DeleteAccount.as_view(), name='remove_account'), + ) \ No newline at end of file diff --git a/accounts/urls.py b/accounts/urls.py index 4c0f3c0d..b6f6ce0f 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -11,7 +11,7 @@ urlpatterns = patterns('', url(r'^profile/settings/$', login_required(SettingsView.as_view()), name='accounts_settings'), url(r'^profile/calendar/remove/$', 'accounts.views.remove_from_calendar'), url(r'^profile/calendar/export/$', 'core.views.download_workbook'), - url(r'^profile/calendar/$', login_required(CalendarView.as_view())), + url(r'^profile/calendar/$', login_required(CalendarView.as_view()), name='account_calendar'), url(r'^profile/feed/page/(?P\d+)/$', Feed.as_view()), url(r'^profile/feed/$', login_required(Feed.as_view())), url(r'^inactive-user/$', 'registration.backends.default.views.inactive_user_message'), diff --git a/docs/documentation.docx b/docs/documentation.docx new file mode 100644 index 0000000000000000000000000000000000000000..fabce23d7fea4722f5732a597003daeb20d5da27 GIT binary patch literal 27652 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⪚s1IAm{=+#~zj6phDRqk~$qWFhS=?=qd0W6w-c z=4IZ6wOdrnQpepjQgGBVrL4yt;@pqUr_u*uj z-(l+@S-lB5XPtZYU$EB-P@PLq9!xkg$C$@j3&G8Xv+`$=(xp`!!qnB7gUXCW!Hc<< zw+32#oRkKWwH*$@w5>BO`cMf}yMSJsb4JG|hY*^Yg~P&HMdg^!b$IPYabkJ^qGF*` z7MbNzFCtWGW~)O{iD0B}^;0!PmgZ=VZXX*KoE(JCX*!+AGEe_SN(lm0$K@njQ;cVo zN;69yxr0xLY3p3=vd#7c`CCkhSkIDq8dd5}LUxTZD{&e1YGnm820P`2+GRO;)&?qA z<**SGU~d>W{Hf;7hv$w>VNoAsSvE{mKMDoIpDiP;!a~61fiiM}-fnkIik|z0p-x9Y zM+0se`O5Sa1L@izJ!DO{3Wu_-zY`fO<$T~n8Cbf=Spujf@m4L$8l_m!_2yC0vn~9z zs?}Qirj}lek7evy(^_nrp+TAw0%mrKB=yGM% zoH|`&FnX`zzaZ$^aj|oe`_RAVSUKsTK=&22B?>?$Oc9aT1{eb0Up_qjwIys*@410P zz+2^PU*UAVXg|MzcR%Wq5EdSL`P}Ja=55liHHO}kK8=1+6F4nuh`g@8GBk!bCa#Wpj(FZ8=z*vo0`}mB zEC_pAYB(`8Sm}h#T;$EEtv>QA5Rl%bR#$4-Yim=(T`0=S?y*+6@j%)r?FSzn(@^Mg z+gE+~3jvd+R`I=knIqMc8%rLU?!hqr{8fW;0(uwsD9X+32unG2ysVSc&A*cey$Q-r zkR8iq_xEB+6;=GM!`c%t00W0wx|QiHHy4XxARa9B&?y~MpDmDdBB_}iqP=jRuLaBq zw+WWLFAhH^%Q?N^vVh?32VS&@`$qPcJlO|IGR+BId-2)Opt(`I-{QIFVNHOOR$UW| zsjegNN8Op)g272SMpYV+o?wc50Jw)P zE_$)>XJyXuRd~^) zev%40QJ?!G>iXHMzoQO6NAiTw;1j|4oWE0xkkaiHAa>waEA`#VJ06!(UD7Eal%;Ku zWlujI-LT}J@J=72OR3D#Fc|YMkgtG-iN<7+5}+zd-G|P)Ll>+7XuFETf?ACkLvgMb zup8PQ!1dQswia|I)W_a@T@9j`g{rCgUEm;4VoIC^TthMiN3b!%L8Gr-;)V zs3@qDt99*c+nU(Y5X&hvPVY)0BZ{Tr|IEQ3>Q<&lDF9!TXmjq2n;YOL3*Ia}^n}TH`xoQj#1s{VX&@bbrI1aCT;<>o$m|G3scmKJU zPDJfWccC}J@q>H#eZO#=@RnYxKDj*6;=OqwR1$@iaQ}QI3U8rnnPF!_oc_jCelsbN zg433Kz*<$1*HK@ZNN<<6!ObbPL7D+FdwWC;-nA(~9EM$lkg1<~;>M9Gj<=xIXB@DS z?#51E2{!ey9ZPY}BN7oNWAw=XJd(T4+h~r%wdj&f;UyE*O*1pycXuS{FHv~x_1Nfq z=DzxK8gaPOPiBB`S=~RM=({e($oaT~%N-(J=@mG_(=Z;ff`~;Xc|JyZTuTaTY~YYd zX5ud@*H92|N@o<{=em&fh$sLb;~|flGVU<|X2WT=G)W4BytFx-j|-%-O-^Ik-c;gP z23Rm-CxC}l%gjnO!Zzi^Q<_O}bA=(*dM4E%(xOfUv>c285%m>5|3`uxpsBieUk|%s z&C!enGagqHe#ED>PN_b@za-xr^B_Nywk2DlLCJ1iK!D;<%Mul$Sz%+P!j>aKLa!y; zNX$ACM@p#hzk~`tXpiFXUE}>v8H&3@z7@%pO&euS#|V9qOk96ZmS#w=1Z)I><$*eN}yn>{RuS( zU)$3KzIvZ!6IJ$+t9cvP19Y3z+*Plw^!#wSEqF&g$qg4{W>+Vg8+{-aXmi!ZT`MUT zR8mr4iDwA44V9jRCY2F^-&h@yuLM@N0Mwu76^H?d-9j~5Ok2j#3|t2~I46B`q^Nku z(!+;?7@WfN%n*^f)W0U02%d*Oa4!5LkG) zFL*09%jtfscRjtuFrocvuXG9opB2hkz#hp>)uXB0`o%T%^!pd?34mYRAO86ktt?&0 ziede3e?Qau&oCkNz2`UrR%!5X_YljtN#bb4&gD6+j#y9jLW0y%lqe*4@~6-KhsAL5 zN@k125&$6xL7|MN^KN9rX=Nu$^3V{i$y&=T? z>@S|ZmGzT1qxQ4>C!s{;wYa_J%2}yWr5({kT7CP{lqOb08p?tbO&gYkX8Hy@QZ2d@ zDvcb@?hxvk0jV+$-HBGVZNvyYcjEbvVn2&4wVY2}Z|<7#-$VDxR$ejq11mSzdacWf z5HoP~_*CS2VS8FvV*@aP)W41KZ>>Xmsenc7inCljYa4YYSSMRI zl#6AE7xd+Pdy{6Jn>_GF6W^Q0rpy5l=hQ8V_7>#=Y536Bpc`A=M2uCQh^D1sv2M%o z-Z8mu;vaWYt|}BgDI|Z8qk(x$TFrW;qURg50yme}9k9{QaBNw9SeLPK;dow-JD%M} zi)1mgIK^t2UAMGkJ2NldyVo_zWsG;0ltqpuksFe6CxSP`SVPvd?C68BS9>-c<55Y9 zCBD?JTk@J>#3qLV3bFkkkvB7~C04>-&d&DMInWkQCyK;;GE3!&_5AkHqd!MWWsE*+ zo`1oKX{mp0^6n^d88QF$34zc41a8IB@)ArKZ#b@MW{~IpEzAa=X>SBRpw{H2pEUnW z4y=2STDPW=MkuS(AyS~jXJ=tZ=vCMb^Cy7S7GwI?VS(}fEY zN5bp{1MzNvO1|bTm5=*4F-|I)KQLUmdSp=`AQ^+kGXpuuR_HHeJ_DkL@?ubM5NM{P zJT|BT52$)r&j=hv#$>Ph9B2f({RyfN(mg-KIk&xT(ulVohj-B`KA!Er3%e+yxk%^! zSR2)0mtL`>!8XTR_QG^@)Gs#3u^TskSi)b6f`a2LOVxg~i_+sB&4h|onD*`%3jJ*~ z3*{WVK%EVNY(Y3Y`lf7@hnO zg_rVOoly{A_z7$-6vGu9gb&D7qfKo7z$Dbd?XqFhs|)-mVxINSaT?_f_|%?enX2=z z;dkDAUoR?qFiq{@09Kav04ZtY>`d!CrNsX7N9guPZiNSa706VMumxCAld$$c=EAq=wA$I{g+g(zKWLJk~)jwEUlJzmi#@P!#1nmToSA zq3ME&U2(iHB3eiNm>$6dSzgdly+%$~^Ul<~DVL|e77gZkLiQNtbUEtTlP!z3m5#Y2 z&6BueK#p&jRRC+N2r5u`X22qNkHC=1FMFQEY(it(NT@Pu4)4-x$IqcBm``N9kmXeE zn|${&W#GuOhMEq_?uO}{L3@lM;q<)=xP`27>H&(k(m4w8uQszhC0z=OyTj3EGhzs^ zT4{g7e2(}A7pri6G{oqJY22P1MB$`re}cw5)3cpC1Y3u;-_=u2ZQ3edYe;dZ@HJ}E zcA=pyn&`p`6Gktdp%Y1^{1HBY-P^B@H43Iq<)mkyw3WsT+EscDb2;7 zKPp%@{8wrNc%Yd4mR3FO1CEA%+Scfc{@aWpmjQJzJy43)7A)ws-4CiadIHdNt{B9|(|=;dMog6{?YhZ z{=aLoI12p^K1VMd@h~c@ob5zjna=l5vo%-k-#|(LT>aN2{-I}Kym;aRxO$*Y%K+e5 zZ~&6x#{59(Nu7iQ96|Iy{y?yn zQ_s0DeLpjuktum5XNszLCPz~V#`OLEP(J_VdftJ^{t9L@&9f0Uyv7cDj%*dqA>BuV zK!#)UAdAF1O*O}Jp^%`Q7lL$Oo~XbhtTuH}9KAB0T%9%qCad6Gw4@Dx;mUvERcE1C z+L2WZcxkWuNKu5U&6NBCV%nzXU|}G72eZAg!_XVGLe5xo$>L%0s+63w4{9Qnbi8}+Z9w9P1-fMIF(slz+%pbypmio!5WT3gZ{WFK|uchg3(nuAz7x$qNvQ;^(J_;O-|*;$!M(GvuxT1VnxT=|}b*P;f|_J*p!M<>yJ-67fiM%3HG4 zygj6LmgqQ!E0@C=H8U%(QZJyukPe!!j^N;_H>Pfl`*_zbOxdPgOcMsi{ba@yW^<51 zHz>c_P=Pky{r#)j3;$wg$Y5PvgCBevvXt@k37{g65Ovo^L314XjO+yy1zb$N>OSQ) zNNiL*#C^Vk&L{ZqNR;D%&V7HfA6z7l8Y0sJ5r(q^^TScV3eD!Zlrzq#EX0wf886)R z30$^*R(nv_2S=pZMu_)pbuFKBd7UR*M&rMvCe>PUV-kRxSpT&(a6_5s<;t|f$jn>T zlm5GVmNuS#J&ZO8iRf<45c219nr@3K*)m0uvu&PEUd8_2Nz5UG287E*--Uv;=r?cF zS<3i@7HoU!f}|7^y_7%oa`H+-F((eyDD}j3j%tU-nAQL_NlJxxPsTKcCb(4Jycjyz zYxwxUNhhf8yf#0qi1gn}5-2swTeF7M;H=#|9LT{#6J@id+>-|_tYl+5$|N>ixy3zv zBJs@hH(F53be8n|;}Log`!RR#WSEawLDaAZdU!m4{y%f}n4F*)`wKvy0%LGFN`Y0) z(g(%>GvbI+K6LyYQ{ineW}g$xn;Y}4bvu2^1aN`Ba_1ASEd7fI@@M^TU4X4tqe&HJ z-p*HnD)~lV`X9$+5>kuv>#C$((1%h^)$(Z0zvn@med4zl#7X@ne3W?#=t$Z9ces!< zpO8lcHRmKRXq56c10;FP&-X9NKu07(ejq2J!nJ1}NA|XUNcijNlpz!j;rM*$F6>tZ ztn0`{btZbk)q|IOx-iat^w1E!!49P}zL`60>8_V~>wfd$Pg0ME5^~f5kX5=G4C>TC zm5#qwsch3|`bC-iE8{nJEZW#NxM<-`Nje`muQq&^?xs%`AbBxun1nG~bZq!7-ceq_ z6%_37#j2&F+=qwJ0deY)Snx)K(sK~@Asgv(7708|Fb~VgmwD&*=1Ffwm6`FYCd~Xa zoi|v`Yr#d_7^${Y;|fdJlEaChdxNznve|(HiiS_|wc2ca-X&gvXy&LYd+7_rOH(!= zG-jb}euij_(4%p4xb(FQ+Apn{D%{|5WtLz+sG*}r1)oZ0_U?f<-DnMaLoPXjFS3c3 z$z|jw&6j46%ryO2TXNhx2k~o_MLj$z43lRP*O~-#W{=ORwarFV!n!DPX^z9LMqRqy z-Drgi<`}Jy&r;ng`OQkzEe~%}N0z=_8s(=}trxG2PS(n;S}}<=%5%o2fBI#xMhima z%60i&M~u{$)!Wu5SZVcUTBWX6#7<=fvG?kbG3RW?2vMq|oPz{2l%yT!qN~O~j8^d9 z9G8C|&9Y>Irqxe?)M{EELBzlv=oLpMsNjkTM}RpI3~`7cXsf;z%F2X^m!K7ALj_^u z<=I6y!%b$|kn{6BbkDo9CvjeRh?9S4sq1E+w}YDTAO6f#6);MLM%Y*X2o zU^=VV3c((ma;sS!(a}4Pskv^v8P=Mfvr}<)%u%chVq&iKQbDB#f(9$h>ui0?stpdl zyl;x#z$SjS)Giep{#Awi+NLqQCVpnp2j%Y2Nea=i(SDU)lDoy35p6Mvv}OfK>_Ap8 zq6nbVxfO^uN0Ea~&)FcV$~Lsy{e+r0S>AHD#u^dkg!kz47H_Fq&618 zRrrFc{MbH-oF4+r@)qK>fHx9D7dbk{q2@iDSa@!tYsq;fxK+9Gsb+$Mv~vJ8p1sSq zx(9qU+O@4Zo2^_ed*V8d;L`%Uc2DoJWN_uol-FYRd_gJoi%#kOsKml>E)#=(1jWv!1x|EyU;Vcp)g$rIwxJ7+?vSi}}wo_Vq zx7ghjVQe0Hl7(t(n!*M(V?c0hbQY6LEqqhwm|?Cwccb*vN-zR5&tzV-2fA3!PY zJ`QG$Y~i;3%)Id{+;cBYQkS?9rt*Bs#G4OevJ@8Rj z>npkZAlI9TsLi>=WPJ;Q`im;EMlzx)YhAG|Z_DUZV#uwvGp-3XFC2v}Ii+p3B!{*J zL798M##TXE+yJh9+dqh)DBPO}M#TxE!>ZLfA~v}Jh3f^`X*w2)G~6bpxQgGBk<%I zRU_+151$LEXAzCr7n+2USAhD+k30V^u_z_61u`rW{MW9p=Te2-52=Nx^Yfhc0kOfz zh}yU&+}tROf_g}0zu$W;vbAL7p`4nfS>3`|YULfNB&0UneO^uwulMh2G*m(Ov!&Ht z_L?~6T+@0yX<^F3yFPmUj1C2&!L%l?=OyIJX|?y*S!Hot`Odl5&3HaDf>*>}2dU1( zSd~x+>S5Ea_Qh80AL@ptU2Ly9P(=sr(>jd2~FnX4*pi@lNAFaneGZF2B+pDle? ztR7amdV;o5&f&+rDKa2hg4qR`;~`;O?;ipBOWzoM{UBj~sg(vwR*ap$Gknt*|Np5~}Rc|Mv+)7|0e(3h!# z##E%)8N?=Dz+~iZiB(n_IZP{leXv(i8g@lEKq+&h1WBF*D1#E03JVVowqeBx>S3{l zm<#BFWHNYp*GszXujC=sIcHy(bk?cN&FeAH-s8?sh)Vk)qF6K*SUpIqDfBCK-r;1M zBpfQCzvM#E{_-2SM0@v93NJAC`Zjel4i%8Frvyh^I^yH`0;7{w_(QOm^M>QarQ86k zRghLo_B&6!_js7uej%+TQ|ajd`E0UU!%yHx+xkDk4TJ?@1e;xSbsxy-S|(_O7?KPS$caF<(IIq zH(>je5L#f+y0?1YOvp|ewleq9gp+JmQgZkdh_~W2{loXp^CZEr6a^{G57^JWIR-ek zWWJAC!Hg9f&C*dcU!oZyQT3+R4SM32+ii(qYkC!$HLY%nH5%2@W{h=%M?_!48Wp-@ zN@`63^*DEGRLr$%P3gQ`@ebD!LKwSdZ4?Ij?F>|#K`o%_2P%Es_;(HE?e`vxH|jW# z=XdayQ+^aoq3=iH{=DDUF@^}r_JM%#GhX}zqQER~x?E??8i{Jh?k(KT8rMVYhm~-- z%0iFwf+~t^)i~kr`qB7%aV$fRO*~e~KT4K1!~P_3m3f5uGkerdGz%C7WddCd*13>= z)g%D`=~#$Xq=T@3w}6%MWB2-QM1w3tfWh7}2#W>rr(k|q$mKu_!l2-P$+4?3jiPgt zP8#+`y@LzC)0w+kQ0UMUh~H6xP3y{#YF+B|rU!lC&6Cva-B)tCylCu+)jS^H{BrK!&Xthp-Ujs&i}-U2aMSFX?%$=$*7C51r$E4dW4xq1ZY*KD(7ED;q#kT^7mpQteu zZp+FgZ9q^ec%UOKL7-$p0}@cDE(*Fctk%=B4%gMy2N5E2D0pM?D}4h^vsDTX5y8kN z358q4+lg$6JdMtQ<+OIuj^&DDE1Rm6nNqR6mrJU3Eq5emOmb60wv93FbLe!Yx_?gP z)kQ+zP5b3vF)OJOr#epurQbC!67znS>21Fi`nGZL;Oy+?YokinOFq3S^q>dMein8T zoUV%9lztwn^v)Hj2pGTh*u#1P7P{!xZ!T=#mzBAmFZF(?tNrfuI{!6~|2vc*r9v3= z_uVnS&foPpV|ING68_Ok>%DYA2(mk{d*Z$C(CbV64L$xEMmrP!ef`6Hd>EMfSlWg~ zR|i8-v~p^CswyrMzf?5aeA6GjUAq!+RpR&jQo;BR;kms;z3n@TefCJa68b7%RM~mu zmXnp)#~_i^Y8$I3`Sn$|NP;aD*!Ty~kwM)eb-W@gY!q-Z5N*LBQUPakix_5y=eETj z%yY1qJ|?%QzJ8PM1egEu&W~`JbA$VBZT;FbH*hWo5|5~79?iX6i!4TW;&@tWH%Lz_ zPlfXcRC<_Y2-L=n=ibvlerJ63(>T9BYr*mISC=bobNpYQuUBwiS{v-p@DC+^@pI|QHpZXQ$ zza$x^c6QFTcFrbF{~-lxPM){TVn7SMCBMdxzeRRI$XdAp);0=MxiVTO zW3lT4g(jiaNNJ_Q^pExN_4{e?Ibolzgliq(g61NfPfrvuN61*pO8)dvkExa1<5|R} z7K}>13MOWcs?$4hNd$F=*KG%4ZI-eeR8n-eOJs2FMvClcNZbkx+KS^WM|#k9L|)Nv zVkkwn`H2Rn%N_*xW9Tu7#XCaNE-l5n4K@PQ2@e;tE|h2UH!~%s}ZgHb;5BoctSYlHG=6< z7WhPAYAXC@Fjtdss^0Wkt|t%;d#c<=ZEA_Ag}8h^?l4|VOI>b%*&b-Y9?PK=Yn4+x z?nRgm;36nWi$w0x7srXn-A4)bTfLHyMb!K1UBHu5w7Em@JreqAme1HpNg!0xx-8SJ zvH-UuDq8$onWyPwhl2GK`4NaM2r``XEEZ%EM~Y%F9CRX*I4tP}b1`%a7t3XkZbCrQ zA3vqY6uA*W_NTiTTg!-{H*=`XtqEIppd53yH(~}sE-A8y=_3aP&^J1NVY?od`rAz9 zJdC(cRtP@BMweHnJw40@ZnyO77Uxm}6R$a~)AIJ~OG^AHy1;@(L#DT;zQM1yph>?j zL%1(TsqGc^f0A0loI{C0{zFaBKh*rcLLL)a(tAQ(Kg!{{dbG2KqWGfQVdy5 z+DzzL@#({WxkE7FQQ4$>&Ni05fd$BDQ zc+O&Sww7d1mStBE)Q55gGy}_0l(+(nACT{BW!QRId1EA=ij1equTUW1#x#>txaObh zO;i8oJh}md;MjO;;gw94MC#qSC|de}devH_ljOFSLP5UB*oCUV*`XD(H!hAkxmnV* z-qz;Ou3LoKX&_q?Yz}_1_B~^Bjps$f0Es&&v-fiIdk4!4nSXzEJAL^+MPjtI8$jz_9fWwy9gPZw zR&J59GJ+p#&3Q{+s;3o7`nS|PiN&Whm;uR^O}~53cVnm4^y(g%>TI5mQIBmN5=;`) zN6PPLwI<_7UXIpM)>#Xc_x+h!W+fui!74LUdQ1nSpf-z@(FU&40E^?0%FNO}zY55> zu?)N3={s)(;jfFJI$qZen9X|DQAC zf4G|~4LLhpQM5kddwf+d`UX_;m?AEft2Ov$i=s8!3x{s*og7nFGgfBV16<2E35oDP z4*3XNNHAqfQo7?su*iIgFPQF(b)DOx!x2hgDszMyx4$nt-7j8#C$qX8p4sxZNKS(4 z8xNPa%if4(z_5}yEuWh~J0&i=s3;}B3TcLE{Q^V$TpqXGYV+Z-55c^M@*?4v9*iiP zVoFGn|1hB3Ho%qL*$%k}lJGp3Qy!f`J&`$Ebf{`+0gxnp=tZH+dsuN2fb=#-0!1qN zG|X=m(|@N3!Gk5gq}Wq_bt!4puv&YI{!BzqPrG*YY)siO0$9gBt*7=@t*l~dOknE-A^Nz2 z?3&xSa#;WKfi37($F`Q$x*K9Rxfqh!9DPogepOdUEc%9H{}M>A?)Z)prmclUhdY<{ZW5V(g#15XzCKezaFfmC_BEd!+G(YTe)7}`#UFgUFG{e z@1OfwexDNvp*QJikMH3_y*xhO?_=^lpN~1<-2-#=5JZW<5I0mpj}IE)Q5NdfWB0LH za>j7v3V?Mt z>>`_y92#vkClzyo=*2N!PC_+@4=DW3lbigdNISP|!Cex%lpHKA(;J0k0NOs9lw6My zBo_B;r&RdxB^@*esx?VZ*N_$QL9wwws4AOGh^qvMLqE#V6qv9i539_buP>BL2tCRpkO1JaLLun(bT z5dW_Zm!vgG+R>kqM+n2}$SqUI94yid*iCW^?crW}1R~Ldw$WnP-pMN%g;^xX(shJ8fUPQM}UNODsiAqw`3QF4E2&kZ$c!kCKqz+}4rU?G9)g{u47tCZ7{wn`Y%A}3g47Y)lGwPibp zRkCHXN&?>;25Jojc$93bBc~cnZ_kXei^gwKHU1{hbLLrB8cNP}9!Mwt&mr$~o4PJyoxJ-EUK1`Mie%J31(@&+F3_MQ4 zEK)0hjdiiJ=JY&%*hFoL^hCJ8vZ{#E<&DA$x21=ys>!Ne%>3%(xV>~({v^0SvL!a8 zc__Llka3xnT#cwsi82EAZ4H&MtSC-!qZEgckS(#_Y>Z2F5AyTM)5ceNx;Ev;U09HK z)5eU{sw=-lzgek?mR!y6&4WQT;9X5b9LxwFWyeNP9)0l$JcPMUKA;8=v#I=qe($vk zVK#gESFsMa`kK6~bT2B?H?zz{6K4)n+@@YwmX>pXu6`9a3-YT>f$nCvTAj|^MpnK? zIhJIO{4lF6IRd3YQWr!D0I7B1c~mND@*Ogn&V@9lgYhC<_TJ#f)7taG)&+RC>#zJc zd6$2)vzj@dHHI?hZ;>aALer2lonYMxYAvk0g*JNjK4GP>s1-9;8rF_QuM2yJp9?(y zVOC`tk7Ky7RA_`(6r)Oi5{J-3UNRh)`&Bx-Dm%mU({%EPcS}()6&jr=uj3mmP@06i}^q8ef3)$OV=$B zoZwDy*93P$aCf)hE`xh;cXx*b4KBeUIDkGLiodDTy34Yq1P8wX5niFaqaB)S};vVu(05a4@-->$hF{qxoPmNh@x>I-os=t-aDaRY<;|L*^K7Pquo-A=^ zMr{@yDS-2I^_*J5{$l@t&`)f@q(y#VR1o}U{Qu5;@%SN*Uj79HL@xN@`aj{Alc}?_ zrJea7F?^Pq3}BHHtpj)0S95oN2fWk?AO|q!sq{oSS5X zx^A)mWMatq&uszEyQ9d}a!fp6QbpZa#h^NA>3$mF{*UwGo?CJqEeR8eFA0j~u?BT+ zse+Fuu4Rnep;oTJXjAF|vkQ|vdRxsOCD3|v=#Vjj+gSs+y)(#gd-Dx ziO=Pfe$?WNe_OCH;Si~SDHPZG#s^R??J&pMR;XpJI(@}dg+&A-iOatY%iW(>B*1Em znensJB5j?;KdU3PSL&pQE4lBQeaD%`w1p;eE@%h2UJ0wB4;F!V8arr+Ce85(BULOfWsu3&@G07E;PrCtEE*;#>cwgyT73(C5o^&Fx2j6>=xc|9M|J6n zPtt+;^OS@G=j6b4h(x6i8(}Z7bda+`Z;A-v1LVFLgmn#-)eRzW5?z>V9${L(DrTq8 zhVQ?3azH1GjlG3uy?9c{`a!v3H&&QM98NalZ^@p&Yg<*s7D3Z4|L|#%xOmF{gkX2m!P_GY;0p5ckjmsaD5td!W-k#|d+Ut>=sJ+Z0I-2Yqx&41cxQ zMGv@RRk)6XLc=!%ce#OU$iiyC=y8;DP49KFy$ZLZaKUPJsV3UDNv)1Ii*T;RV1it?L}T z-Dq#>S9hHL$%o=5YOM<~V;x#M#{DX$^1=*7pJ@5~#3FQ*5d@9j(ZqfeCF>q6 zSuiWh*v1upZML@75a9_5cFS?!K?0<@{}fE8Uvyx0rzf^A!rZ%QU)PnJc*sa|xeCCJ zM4P>T*q!ltf9WN@6vjs)Jp*aVO+H#^kqWfOVdAN)gp8Kxr3-x9lXH({vemec)!yAK zL4V?Q7kPH;ncGPFp!MeIUvIvcEGCNwa5P&0-i!5DRO@DHr1H1>FKVJ&x|bOZcC~et zFKMyK(iEM}7FP(T&As&Py9{}d0W~J;LiF8LzaDlka2bR3+;kh@Mq&|30nNF|tCX5d z+hv&%rNeuA)w04L7EtJzSi6~rNn=oR004ZSp~Qm=W6^Mo#~wi5m#<*C6_=i6$Xid~ z|8mc*@(%l)gAqf`UGQf#^#y&#q$Z}qS!LN#9~Wk&l0{B*2+b56H17BVtKTR&&->^d z5+=PuD#S$8B7dIaz^nCq)}z$YrYBN%UbJaKU|Uq1EM;fO;(Lu9Ol_q+yBu5zp=eH; zwEfS!PTrX9ii9)h#2$mb+ViiFY5`lhCU*+|ItbWJ^|l6r`>AjN2nd3|+~wr#VPoo~ zVd-okW@ct;?EIgJhfF0E5I5Su3She8Gg+YQ(={&5XJ|bW$q?srY{kxEZ$&L{2Ok>nO4vn#>cs;_-i~iu9jE^+m)b^v!OK>~Qco(F&u=RUs+yFWEI&^lOst-V@4J9buHt zlS9QC^b6?4Kk^x<&<4tMm>kfKU&QWfV+-O4roYKGNibhF8?Jp9_R0W9GaLr*-aE(S zYp4P@@a$Z+dOwsT(){*3*{9|<{}sN8N8c(OI-+lpSY0mj4}USXr`;lN$NX&fD@LOs zy_+Z+xTf*_&U+mLp9ZPX z9uYHYlZSH^JxF0;MO2h|A*wft)n@%^KHF$-cv`Re=<2QJ*jyyxPFeRJ(2!?5dB&?J z2A`)ExY{TCh*!*zf-o=ahH#m6`>I{x^idJ&DuYP5%I1{Ah*c*no9PFy5v2YQ?dEXn zS}bQ_(CJDMmx7i7=LXT(rR)K&L({Op{MWq{5D#WCQ{wVl%-KiW_;j9m(5Qlr@E&W- z@S3HJUgN8$VUd~`V5!g#ae1b31j|Y(Jlt!A$#8ikCv-RQd`v%t?nWd}`2M$FeL=dr zS1vIuk0A96;XC*z+YQhB4=N;g=Q7lzRQKJzB1~0mXW!f7;#Gkzs+Ioo{8{lD)rnof z@80*0y+y<@-^9LunY-+P)&;Oj-n{ZWhf{bCHRP$}7qpgynsU zZGa|Yb@n}h%YPD;wS^6tva4EX&WhDBgV08^LVftabbcgop@ei^O|OA)-%PndEPwdL zbj$EtglFwTOx%V~bS&vi)eDTE+XmqPMVSxv#~!*0y^$Ay7-%Ne6g^xv(@^Sj{PYp| zuvsYB{mifj4dA|QRj}ELXh|IA%#TcXY)4nC_K{1upjm?tnEBtPIKDfnn$lCzI<8b8 zHfKYS7Z|QaqY=O^!{`4h?4usr#jmYKPmtGjvos(Ag5o@a&&oS6%f7xM6EzF`sCUX$ zSbL1maOc}h1hEVz56CzXFNv$0h6MzrcmyjWa4?1P2F)^`h{Gel00d3^qi`AO)--5; zB5o1Cu$rbF%q1Ka1xKR_-VU}28}`V%XR18`*P<24Xi5+OL5Mtj9C-0l?hgEscEpMM$KANZ%yzli&O zJ|pHGBdZ@oD6`}NLuA`8LVnqBrc5R++SBz4eey4>6@A^^B45G*f^gE2V@lP)6%M-F z3;(gTnMVNBiTm)hq0?_dbNsT}yckyX*P%Q@zkQJY^#}4VA8x@2n_(+WvA=9XNB`xQ z{}=JZj?G#d?XCNM(MR~|otMKZ$QIp&DU^mVkr2KoR2ud>ac;RNdvu!Ol8QETs5W6F zMQzviaILXAh|o+_IPr1YlGlkmA61&e?7bUzsJlm3aF@-!AV0B;CC!{Ca@h}*c^BuQ+`m_Ksa~ea%hyY6rdTi&q)HQ`zFDrag+qDc1KcJP6G?qI1$RU0fPc z@IrPG*4muqYZP^#R?m@6b{Oga!1{-8VQ-x7_DpQF4M%5$x0|Ct0}M{ei|(~R2vxCf z_;-aU1?{>CE^Vu2+-}RtnZ6G3_Df=}a?Juizbm89FD&0`_@uVqfiv~}_izQR^@e}(|RW&juUmK;HxI2|kLAK+q+Fm-CJX>xdp24c8!cuQaL)UkQhiNweC zafp?WVuL)=-;Q+56BFKtkt3XS71d>26@QC3gd~z6~))i zJuqsJh(D(?GMqdLbSvY4O^h<_A+!+r0nEfu&Qk^^-$LJM4?*0U`muc z$r_KG%Nxl_uuwpOX^Oo*1pu9~7z-22TcaZFQvyzj`$G%e44Tsn)m*L5#OKwwG7#Y6L+LChTZIMe^jTrwy_Va5hndGB= zEjQ3{;DgdK^Ky>pXlGCM%GV2Lb{@jDWcHDx5ssAhTizwun1%94)UzqZa7ZSss!!%; z{Q|1Mdo5*vX|h^7eIvx10EJ@u`YvS~pV2}u90eo`ZXzM~^}Z?%F7h>~uRG2cSD!n$ zO@W)n7z486wR>qy326^b-L+Lbkz8}WoxRmF6yo05*m>ut=(jYZ8>q49IzxU?ZH&55 z7v>%>zF;*Gi>QHizpW65J=<-@ zsOUUKThe)1DbjC@&kE(Zt#Eqw_?}%mnUd40L_*sM-t-v4GG}D@v$c4N*GqxEMh>;_38vB1DI_As1r~Mv z-=Tx#oN4t`b9=M3CE*lR75BdC!w}|@c1pi~+>jwr+0-cAP2a%W)CfOF-!S&Bznjan zd~LvoANOgl=6X?JhYt7L#cKN8-^()tVt z_Z9KwyHnRt;qD>vxjqmb_V-s_7Mq88h_k&f%1P!tAv_X~aIcu+70SI6A#3aPtX<`I zUWCGs!o<%`bXIvxwuj_!bH_$FCUrnHkb%DirK+X3%A-@l}g)ehwD`?J`Q) zjvQ1(lN){W$hI8Rtbs?O-_{_39Z53JHwn7qHZ9m%2FL*Mo;WT@3%oOG2xO6E=)A|x zC1h4Y56tSe=59x;^frWd^L^&!0RQ1lIf%1u*gn_W^!On!Zt1&iSBNv}Ja@hl`DJJ< z!10&COut|~Z}R*A)6y6}j+Y*oej#K4s0n5;jvxd~^Q)Q?K@YdUmlDg+i~zgpENyB4 zR2-LpW*#f};Oa(8=GM{g=T6f4JlSi&*0QbK*_8{}3w^L0bQE zt)amc_+-&sJz&ws$Vs?@qYdz_a?DDH!766v%Im zv?De&pfV6cnwP`ITudz)rV>8iYzKs)*IyCh`nkGBCK>M+yhUKdWyV zQQB2~+oYKgSvuULFZng(*YySlTKIskbPFp4e9a4U;exVUb&Dd+FEFA;9+&0F_bSrD1?!5@Mi6}2u;E9nqZ?r^*k?P-OitQwa#5~RyAsZU z1H|hr1a#LpqzFrtdM~L$=Fn>#eFnm-Y168u#;vw$c~Ve9-*3@J3Q3i0^vszLm!BG! zgalkU#qFq+c%CP>S`TjrTM-=_(^tIY*bwVZJ-UO*!IF^5fb}b(MJn`>rdnJ}_?)UZ zQH$>jdWmj{xagl#|_MjmWzeGUCnR2jCn87qg;4-`O_qi16SwMOZ>8rj#X%B7){iK zIl^khuo?4|TKh)SlA&lZ#tfGOP2Z`vHC1%|JV6V@6@kAU%zZ?xcV89owW$}-eG=4Z zm)qq)lbU4Y;ykR}-D&A4BY3yn;&w5DHzO(1lCY+NM2)%Il7sVDf(5IO*#F5e1*qdP z3b;wAxNPWDvoG5XEZgApDHwY?he-=WNNltgR~qH~%tZiK8rSFfGJBLYt;i*YbnH51 zkS~;+jk_c#*7~J^_UcQo!n867yv&T?>8uM3XmLf0b#-_;Oso2(k%Rm=vih7P*@@k* z&y(G8uQQ_5Z0CU1&bzacb0E}>!l6vAL8>=Z@mclN+n-0h1c3JIB3|PN4N?suj5PG+ z>TJip1CNIi2uDk zJc*5G9syoib>EUVtZ0?R8YWAhR>tCjsaMDQZVhAd_zFa(+joYQVgtj5sWbEQc5Y3` zr3{%eW0B$mpb%FC0*x0$IZfqlWpMAZQSOvQdL%nfy}u2A8bE;!MgPpgD@$RExdVS` zC!(^kL&2|UwYWMMvhs0EDwbht#@vBbH1g#Zw3z@4Gvl*t+T#j8e^a`tP9l^mkwwF=SJo$dg{;1Yt zx334%>aMBHi${4p(swHWHBmfX$JMT5Sud1ZGrnIgWwE?J9$nN2xfk3Fk!UJlwPxa1 zrIfQ9dKk;k+43=ZiSlhbR^kzRYQI_WPE*5_}Xv_q!K?gFtG3;P`V6V z7xHsSMv7oU?geu!+|`<(yLiB%wUd$$B*rq}W{2s{M+jEpLwOk4w8_>X%v5YGn+uH7 zC`lT3XlO_@S?p(j8@q7N2a7p82&1mk+Zh?^`$5x4#rb7&wLK}jo+Ixx4SA;4^YL$R z%ioC7_6&$K`BEZyL2V~5oG7Bi%ina#!ZFyMOOGtaV&=EW&9_+{laPqxMXT$tq@k#P z-wuvxe+rcZ;Q`f^*}SxKS35OHb?olia1yGlqL4_uWmv1^+*}yk#^%WV$NReBY-Flx z=ry)*D!qqtKk9tijE;M=wkpyG6PcOJ=(79K+7fgdZr)Y|5RowjMQ|Csv%AvT&vtTi z{D|=*N$jk(iTBZZYMf^7i*MGn&Z%p+^@!)WHy< zD?iEAC86(xmrX4WZhcQJ0jY3f!BmZpC&5$&Ex0MtC6&Qjt3bVW_A>c;UqFg%gP6a- zWLU+)_q!jN=7ID6-0?q@S2a2^e9fhLw7P;lNuuVHZ#tRqM)tkxj%#}!BB@TQ;7mMq z%*LZLe6}?~SCif!%~42(W+aBMu2&TLQ%PRWFlSh;Mp5|Kl033MTre2@Y+kSa!p*-t zXWgw#!rw@h$nNUl1^=WDx$56O<9?EgLS0~IWzAV~yXXqvSfR>NdmcuoT{^j|Hyh$h zSTI@NA>`C-hmy|IX5mDLZXX&&Yy-qPQYrTB^DEWNBY2&9@bnmdMNF$3b5n%81#u(se`fF?hPDK8{DV4!PzNiE} znVw&wGMFckp%0n$L{3SZFOrvbMePgRaTDs8Dx^dbKHMD0S!-}zdMG7QSOK|z5x4sJ1(lnY>QCFA0~Hr><1VkT8PUx zxQkHdqy+}5-gmjYfSaWUqYw-6DF@jz?pCd$L~;`BAn&A~N&7o{5UTC#o#7OYQv8q> z=H539yZq+Hh;9gMfGvJX=XgIx&|fwSSO3oMz6t{ zz%)6|08X8_OD=nsypaN=wd>OAv<(sK$L-f^3Q)0}YlqVRVZx-tsU0*dT0}dvGv4X* zFt^~wNsX^ydE*^=2fwsAsY8rj7z=t&~dF$}5( z*-=i)jn=SxM8rn8`Hs_<9{hV9S@5NUw1MA~g@Qa?*4kmcYa@(X4c zQJYv}EItZNllm0BlJ==+P!?vb75z)%#90NEkT?G(i)gyM^cd*m#93Kn=y*PEx2 ztw2-FvZ-hRI^gvM{J<_=1ST;u?4VWv-eq^~TzJ5DjQ*0!6(8G$<{Aj9VLKy-3WZhs zE-3EH*Y}D-un|)#(@ z?=M=@nOF;D@aTC~3VrD;LHY1i;@$KtsYp4jJT|?H-!VtPJ%w7=S}nb(nn%GapfGj? ztX~R$9^#$4p1MZx0r1US>PlOAEJ@|t4~<)2sAeW>WF9s0-}3=mHlnB0GQL5&cDZXn;&K(~(_SzbADLxF{65uaXJxE`Qaqesk+=H&Y3=02tA>yC_fJ~lBO zCq_Z`9b4XZ?bp~|!{QNlbuAnIRO$>~W5~MeGm;-YtXQ>-a zQNtd+`d<+Qe6f{h17xKF-oKm!i0HQ&$Z@$HY|AKIvM^T%5rj@K2z%r@+y?d9WSZ-)OH|w^=clSt6qyl>`CL553P9;86(C2$nZY ze$sUT9tCU0^|xkpBe$Km??}yW*x#!*w`r>0-^&~oonB2NCme$>#DAJEBoq_)jqty( zGxXQx`fK|ys}3p3{FC6H>zn)q{IwkdYd`+B+R1a^Ki7QtJMajs-~A&A|NmtLi04et z6Zrq;vPSrqbpFrb&&B4y;g7t3!v7&Xe~y1HJN}Jl2ft1J<3#>0LVgZ^u0Q<^w-Wpl z{#=dvoZ`9C<~K!;_@5Mi*WEmaKi3NUhQE{k6aGv&@SNfK>+|0X0GYoG__vqo&v~BD z!T;uQRQU(bufFv;_@80!Zzu$WtN{eXe+9kI;m^aA-vmITKkGIFufg>{LCbUeKOY6Z i(GU>Drhlvc&j*8|3=FuHLqMQ_zhU4T#mwT@um1y}$9W+D literal 0 HcmV?d00001 diff --git a/exposition/admin.py b/exposition/admin.py index 19b3d7f2..f694e6e8 100644 --- a/exposition/admin.py +++ b/exposition/admin.py @@ -268,7 +268,8 @@ class ExpositionView(AdminView): 'canceled': obj.canceled, 'moved': obj.moved, 'logo': obj.logo, 'visitors': obj.visitors, 'members': obj.members, 'audience':[item for item, bool in obj.audience if bool==True], - 'quality_label': [item for item, bool in obj.quality_label if bool==True]} + 'quality_label': [item for item, bool in obj.quality_label if bool==True], + 'place_alt': obj.place_alt} if obj.place: data['place'] = obj.place.id diff --git a/exposition/forms.py b/exposition/forms.py index b05ef8f7..f64f8411 100644 --- a/exposition/forms.py +++ b/exposition/forms.py @@ -53,6 +53,7 @@ class ExpositionCreateForm(forms.Form): choices=[(item.id, item.name) for item in Theme.objects.language().all()]) place = forms.ChoiceField(label=u'Место проведения', required=False, choices=places) + place_alt = forms.CharField(required=False, label=u'Альтернативное место') #creates select input with empty choices cause it will be filled with ajax city = forms.CharField(label=u'Город', widget=forms.HiddenInput()) tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) @@ -223,6 +224,8 @@ class ExpositionCreateForm(forms.Form): else: exposition.place = None + exposition.place_alt = data['place_alt'] + # fill translated fields and save object fill_with_signal(Exposition, exposition, data) diff --git a/proj/settings.py b/proj/settings.py index ab5fc450..2c363212 100644 --- a/proj/settings.py +++ b/proj/settings.py @@ -145,7 +145,7 @@ TEMPLATE_CONTEXT_PROCESSORS = ( MIDDLEWARE_CLASSES = ( # 'django.middleware.cache.UpdateCacheMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.locale.LocaleMiddleware', + 'solid_i18n.middleware.SolidLocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', diff --git a/proj/urls.py b/proj/urls.py index 4fc72346..9cb0214d 100644 --- a/proj/urls.py +++ b/proj/urls.py @@ -5,6 +5,7 @@ from core.simple_index_view import AdvertisingView, AboutView from views import MainPageView from django.contrib.sitemaps import views import debug_toolbar +from solid_i18n.urls import solid_i18n_patterns from django.views.generic.base import TemplateView class Robot(TemplateView): @@ -30,20 +31,29 @@ handler404 = 'proj.views.error404' urlpatterns = patterns('', url(r'^acquire_email/$', 'registration.backends.default.views.acquire_email', name = 'acquire_email'), + url(r'^yandex_4c45d77eb3f781f8.html$', YandexCheck.as_view()), + url(r'^expo-b/', include('expobanner.urls')), + url(r'^social/', include('social.apps.django_app.urls', namespace='social')), + url(r'^login/', 'registration.backends.default.views.LoginView', name='login'), + url(r'^logout/', 'registration.backends.default.views.LogoutView'), + url(r'^accounts/', include('registration.backends.default.urls')), + url(r'^i18n/', include('django.conf.urls.i18n')), + url(r'^', include('settings.old_urls')), + ) + +urlpatterns = solid_i18n_patterns('', url(r'^rss/', include('core.urls')), url(r'^sitemap-(?P
.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}), url(r'^admin/', include('proj.admin_urls')), url(r'^sitemap\.xml$', views.index, {'sitemaps': sitemaps}), url(r'^sitemap-(?P
.+)\.xml$', views.sitemap, {'sitemaps': sitemaps}), url(r'^robots.txt$', Robot.as_view()), - url(r'^yandex_4c45d77eb3f781f8.html$', YandexCheck.as_view()), url(r'^$', MainPageView.as_view()), url(r'^page/', include('core.simple_urls')), url(r'^theme/', include('theme.urls')), url(r'^places/', include('place_exposition.urls')), #url(r'^translators/', include('translator.urls')), url(r'^translators/', include('specialist_catalog.urls')), - url(r'^expo-b/', include('expobanner.urls')), url(r'^newsletters/', include('emencia.django.newsletter.urls')), url(r'^', include('accounts.urls')), url(r'^', include('exposition.urls')), @@ -59,19 +69,14 @@ urlpatterns = patterns('', url(r'^gallery/', include('photologue.client_urls')), url(r'^', include('file.urls')), url(r'^', include('django_messages.expomap_urls')), - url(r'^advertising/$', AdvertisingView.as_view(), {'meta_id':58}), - url(r'^about/$', AboutView.as_view(), {'meta_id':56}), - url(r'^partners/$', AboutView.as_view(), {'meta_id':57}), - url(r'^contacts/$', AboutView.as_view(), {'meta_id':59}), - url(r'^social/', include('social.apps.django_app.urls', namespace='social')), - url(r'^login/', 'registration.backends.default.views.LoginView'), - url(r'^logout/', 'registration.backends.default.views.LogoutView'), - url(r'^accounts/', include('registration.backends.default.urls')), + url(r'^advertising/$', AdvertisingView.as_view(), {'meta_id':58}, name='expomap_advertising'), + url(r'^about/$', AboutView.as_view(), {'meta_id':56}, name='expomap_about'), + url(r'^partners/$', AboutView.as_view(), {'meta_id':57}, name='expomap_partners'), + url(r'^contacts/$', AboutView.as_view(), {'meta_id':59}, name='expomap_contacts'), url(r'^', include('password_reset.urls')), - url(r'^i18n/', include('django.conf.urls.i18n')), - url(r'^', include('settings.old_urls')), url(r'^', include('service.urls')), ) + if settings.DEBUG: urlpatterns += patterns( 'django.views.static', @@ -85,7 +90,7 @@ if settings.DEBUG: ) # ajax urls -urlpatterns += patterns('', +urlpatterns += solid_i18n_patterns('', url(r'^registration/reply/$', 'registration.backends.default.views.RegisterReply'), url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'), url(r'^register-complete/', 'registration.backends.default.views.complete_registration'), diff --git a/templates/admin/accounts/user_confirm_delete.html b/templates/admin/accounts/user_confirm_delete.html new file mode 100644 index 00000000..cf9be897 --- /dev/null +++ b/templates/admin/accounts/user_confirm_delete.html @@ -0,0 +1,9 @@ +{% extends 'base.html' %} +{% block body %} +
{% csrf_token %} +

Вы уверенны что хотите удалить акауни "{{ object }}"?

+ +
+ +{% endblock %} + diff --git a/templates/admin/accounts/user_list.html b/templates/admin/accounts/user_list.html index c92b52bc..ca297ac5 100644 --- a/templates/admin/accounts/user_list.html +++ b/templates/admin/accounts/user_list.html @@ -47,6 +47,9 @@ Изменить + + Удалить + diff --git a/templates/admin/exposition/exposition.html b/templates/admin/exposition/exposition.html index 3002ae48..4a1d08e9 100644 --- a/templates/admin/exposition/exposition.html +++ b/templates/admin/exposition/exposition.html @@ -126,6 +126,13 @@ {{ form.place.errors }} + {# place_alt #} +
+ +
{{ form.place_alt }} + {{ form.place_alt.errors }} +
+
{# theme #}
diff --git a/templates/admin/newsletters/newsletter_list.html b/templates/admin/newsletters/newsletter_list.html index 54b824b2..4aa105ed 100644 --- a/templates/admin/newsletters/newsletter_list.html +++ b/templates/admin/newsletters/newsletter_list.html @@ -45,7 +45,7 @@ Добавить новый список
{# pagination #} - {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} + {% include 'admin/includes/admin_pagination.html' with page_obj=page_obj %} {% endblock %} \ No newline at end of file diff --git a/templates/client/includes/header.html b/templates/client/includes/header.html index 88b10a58..839ad05d 100644 --- a/templates/client/includes/header.html +++ b/templates/client/includes/header.html @@ -12,6 +12,28 @@
+ +
    + {% get_current_language as LANGUAGE_CODE %} + {% get_language_info_list for LANGUAGES as languages %} + {% for language in languages %} +
  • + {% if LANGUAGE_CODE == language.code %} + {{ language.code }} + {% else %} + {% if language.code == 'ru' %} + + {% else %} + + {% endif %} + {{ language.code }} + {% endif %} + +
  • + {% endfor %} +
+ + {% comment %}
    {% for lang in LANGUAGES %} @@ -32,6 +54,7 @@
  • admin
  • {% endif %}
+ {% endcomment %}